未启用带有架构的Java XML解析验证



尝试使用模式验证解析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?非常古老的领域?

您没有设置DocumentBuilderFactory的Schema。因此DocumentBuilder无法进行验证。有关DocumentBuilderFactory setSchema方法,请参阅javadoc:*当{@link Schema}为非null时,解析器将使用验证器*从中创建以在传递信息之前验证文档*一直到应用程序。

相关内容

  • 没有找到相关文章

最新更新