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

标签 java xml validation xml-parsing schema

尝试使用架构验证来解析 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}非空时,解析器将使用 validator * 从它创建以在传递信息之前验证文档 * 深入到应用程序。

关于未启用使用架构的 Java XML 解析验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60983447/

相关文章:

添加工具提示样式错误消息时jquery验证错误放置问题

java - 创建弹出消息

java - 与http客户端或httpurlconnection通信后如何保留 session ?

java - Android 运行时出现 NullPointerException 错误

python - Unicode解码错误: 'utf-8' codec can't decode byte 0xe2 in position 434852: invalid continuation byte

jquery - 使用 XML 选择2

javascript - validate.unobtrusive.js,无法显示客户端验证消息,但它适用于表单验证

javascript - AngularJS/HTML5 嵌套表单验证

java - 在 android studio 中构建应用程序时出现错误 org.gradle.execution.MultipleBuildFailures

java - Main() 中的 while 和 if 循环希望我删除其下面的代码?