我正在尝试使用xsd文件验证XML文件。我使用
链接了XML和XSDschemaLocation
但是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吗?
答案 0 :(得分:1)
请注意xsi:schemaLocation
和xsi: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" >