如果XML无效,如何连接XML和XSD并给出错误?

时间:2016-01-26 10:01:29

标签: xml xsd xsd-validation

我正在尝试使用xsd文件验证XML文件。我使用

链接了XML和XSD
schemaLocation

但是XML没有读取XSD文件。

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="one.xsd">
    <person>
        <full_name>Hege Refsnes</full_name>
        <child_name>Cecilie</child_name>
    </person>
    <person>
        <full_name>Tove Refsnes</full_name>
        <child_name>Hege</child_name>
        <child_name>Stale</child_name>
        <child_name>Jim</child_name>
        <child_name>Borge</child_name>
    </person>
    <person>
        <full_name>Stale Refsnes</full_name>
    </person>
</persons>

XSD文件

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">
    <xs:element name="persons">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="person" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="xs:string"/>
                            <xs:element name="child_name" type="xs:string"
                                        minOccurs="1" maxOccurs="2"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

如果XML检测到此XSD文件,则应该返回错误,(因为我使用&#34;名称&#34;而不是&#34; full_name&#34;我也限制&# 34; child_name&#34; min - 1和max - 2)

有人可以解释如何链接XML和XSD吗?

1 个答案:

答案 0 :(得分:1)

请注意xsi:schemaLocationxsi:noNamespaceSchemaLocation

之间的区别
  • 当您的 不是 时,请使用 xsi:noNamespaceSchemaLocation 名称空间
  • 命名空间中的
  • 时,请使用 xsi:schemaLocation

不在命名空间

您的XML不在命名空间中,因此您应该使用xsi:noNamespaceSchemaLocation

<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="one.xsd">

在命名空间

如果您的XML位于命名空间中,那么您可以使用xsi:schemaLocation

<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://example.com/person one.xsd"
         xmlns="http://example.com/person">

(注意命名空间和XSD文件名之间的空格;允许使用其他命名空间URI和XSD文件名对。)

您的XSD将使用targetNamespace

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           targetNamespace="http://example.com/person" >