Java XML проверка синтаксического анализа со схемой не включена - PullRequest
0 голосов
/ 02 апреля 2020

Пытается разобрать XML с проверкой схемы:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(true);
dbf.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
                "http://www.w3.org/2001/XMLSchema");

DocumentBuilder db = dbf.newDocumentBuilder();
db.parse(xmlFile)

Схема:

<xsd:schema targetNamespace="http://xmlns.example.com/xml/example"
            xmlns:orm="http://xmlns.example.com/xml/example"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            version="1.0">
    <xsd:element name="book">
    <xsd:complexType>

        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"
                         minOccurs="1"/>
            <xsd:element name="author" type="xsd:string"
                         minOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
</xsd:schema>

XML:

<book xmlns="http://xmlns.example.com/xml/example"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.example.com/xml/example http://xmlns.example.com/xml/example/example.xsd">
   <name>Foo</name>
   <author>Bar</author>
   <hello>world</hello>      <----INVALID
</book>

Но синтаксический анализ без ошибки , Это правильный способ включить проверку схемы при анализе DOM?

http://java.sun.com? очень старый домен?

1 Ответ

0 голосов
/ 02 апреля 2020

Вы не задаете Схему DocumentBuilderFactory. Поэтому DocumentBuilder не может проверить. См. Javado c для метода DocumentBuilderFactory setSchema: * Когда {@link Schema} не является нулевым, парсер будет использовать созданный из него валидатор * для проверки документов, прежде чем он передаст информацию * в приложение.

...