为什么这个XML对这个XSD有效?

问题描述 投票:1回答:1

我不熟悉XML,现在正在解析XML文件。验证XML文件时,我们收到一个错误:

发现无效的内容以元素'nxce:element'开头。目前尚无子元素。

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 eclipse xsd xsd-validation xml-validation
1个回答
0
投票

您期望您的XML对XSD无效是正确的。

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

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

应在其中指定:

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

请注意,xsi:schemaLocation采用名称空间URL pairs,而不仅仅是指向XSD的URL,以每个名称空间为基础来定位XSD。由于您的XML不使用名称空间,因此请使用上面显示的xsi:noNamespaceSchemaLocation而不是xsi:schemaLocation

另请参见

© www.soinside.com 2019 - 2024. All rights reserved.