xml - 为什么此 XML 对于此 XSD 有效?

标签 xml eclipse xsd xsd-validation xml-validation

我是 XML 新手,现在正在解析 XML 文件。验证 XML 文件时,我们收到错误:

Invalid content was found starting with element 'nxce:element'. No child element is expected at this point.

XSD 使用具有 4 个元素的选择指示器。 XML 文件包含所有 4 个元素的条目,因此我们认为错误是由于错误使用选择指示符而发生的。实际的 XML 非常复杂,因此为了检查选择指示器的工作情况并使用更简单的文件重现相同的错误,我开发了一个 XML 文件和一个 XSD 文件。我在验证 XML 文件时预计会出现错误,但验证 XML 文件时没有出现任何错误。

XML 文件

<?xml version="1.0" encoding="UTF-8"?>
<employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="file:///EmployeeSchema.xsd">
<emp>
    <empid>3</empid>
    <name>Name</name>
    <address>
        <building>Building</building>
        <pincode>Pincode</pincode>
        <street>Street</street>
        <area>Area</area>
    </address>
</emp>
</employee>

XSD 文件

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employee">
<xs:complexType>
    <xs:sequence>
        <xs:element name="emp">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="empid" type="xs:string"/>
                    <xs:element name="name" type="xs:string"/>
                    <xs:element name="address">
                        <xs:complexType>
                            <xs:choice>
                                <xs:sequence>
                                    <xs:element name="street" type="xs:string" />
                                    <xs:element name="area" type="xs:string" />
                                </xs:sequence>
                                <xs:sequence>
                                    <xs:element name="building" type="xs:string" />
                                    <xs:element name="pincode" type="xs:string" />
                                </xs:sequence>
                            </xs:choice>    
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>      
        </xs:complexType>   
    </xs:element>
</xs:sequence>  
</xs:complexType>
</xs:element>
</xs:schema>

由于 choice 指示符指定可能出现一个子元素或另一个子元素,因此我预计会出现 address 标记中的错误,因此我使用了所有 4 个元素。但是XML在eclipse中被验证没有任何错误。 您能否告诉我,为什么我在验证 XML 时没有收到错误?

最佳答案

您认为 XML 对于 XSD 无效的预期是正确的。

您的 XML 可能甚至没有根据您预期的 XSD 进行验证,因为您的 XML 指定了

xsi:schemaLocation="file:///EmployeeSchema.xsd"

应指定的位置:

xsi:noNamespaceSchemaLocation="file:///EmployeeSchema.xsd"

请注意,xsi:schemaLocation 使用命名空间 URL ,而不仅仅是 XSD 的 URL,来在每个命名空间上定位 XSD基础。由于您的 XML 不使用命名空间,因此请使用如上所示的 xsi:noNamespaceSchemaLocation,而不是 xsi:schemaLocation

另请参阅

关于xml - 为什么此 XML 对于此 XSD 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61638460/

相关文章:

java - 如何摆脱 Android 中的口是心非?

java - jaxb:意外元素(uri :"",本地 :"head")- 没有 "head"元素

java - Spring 安全 : configuration error

xml - 在 Hadoop 中处理复杂的 XML 以提取数据

java - 加载 JNI 共享库失败

C#使用递归字典存储xml有什么缺点

java - LinearLayout重力

java 。 XML。如何根据 XSD 架构验证 xml 文档的某些部分?

java - xml DOM-换行符在 java DOM 解析器中添加文本/属性内容两次

c - libxml2 所有 xml 转 char