简单 XML 架构到 XSD 验证
Simple XML Schema to XSD validation
我试图找出解决这个问题的方法,但似乎找不到。
这只是一种简单的 XSD、XML 文件格式。
我不断收到的错误是:错误:元素 'contact':不需要此元素。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"si:noNamespaceSchemaLocation="address.xsd">
<contact>
<name>Hana Song</name>
<phone>82-51-120</phone>
<street>1001 Jungang-daero, Yeonje-gu</street>
<city>Busan</city>
<origin>Republic of Korea, South Korea</origin>
<zip>47545</zip>
</contact>
<contact>
<name>Genji Shimada</name>
<phone>949-955-1380</phone>
<street>1 Blizzard Way</street>
<city>Irvine</city>
<origin>CA, USA</origin>
<zip>92618</zip>
</contact>
<contact>
<name>Jesse McCree</name>
<phone>800-777-2489</phone>
<street>201 W. Marcy St.</street>
<city>Santa Fe</city>
<origin>NM, USA</origin>
<zip>87501</zip>
</contact>
</address>
XSD 文件:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!--definition of simple elements -->
<xs:element name="name" type="xs:string"/>
<xs:element name="phone" type="xs:string"/>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="origin" type="xs:string"/>
<xs:element name="zip" type="xs:string"/>
<!--definition of attributes elements -->
<!--definition of complex elements-->
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element ref="contact"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="contact">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="phone"/>
<xs:element ref="street"/>
<xs:element ref="city"/>
<xs:element ref="origin"/>
<xs:element ref="zip"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
您的 XML 中有多个 contact
元素,但 Schema 只允许一个,因为有属性:
minOccurs
和 maxOccurs
。默认情况下它们等于 1.
所以...将您的架构更改为:
<!--definition of complex elements-->
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element ref="contact" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
P.S。请记住,minOccurs="1" 要求至少有一个元素。如果那里根本没有联系方式,那么 minOccurs="0"
.
也不推荐 maxOccurs="unbounded",因为可能 "infinite XML attack"。
最好将它设置为一些大但实际的 maxValue。例如 maxOccurs="1000"
.
我试图找出解决这个问题的方法,但似乎找不到。 这只是一种简单的 XSD、XML 文件格式。 我不断收到的错误是:错误:元素 'contact':不需要此元素。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"si:noNamespaceSchemaLocation="address.xsd">
<contact>
<name>Hana Song</name>
<phone>82-51-120</phone>
<street>1001 Jungang-daero, Yeonje-gu</street>
<city>Busan</city>
<origin>Republic of Korea, South Korea</origin>
<zip>47545</zip>
</contact>
<contact>
<name>Genji Shimada</name>
<phone>949-955-1380</phone>
<street>1 Blizzard Way</street>
<city>Irvine</city>
<origin>CA, USA</origin>
<zip>92618</zip>
</contact>
<contact>
<name>Jesse McCree</name>
<phone>800-777-2489</phone>
<street>201 W. Marcy St.</street>
<city>Santa Fe</city>
<origin>NM, USA</origin>
<zip>87501</zip>
</contact>
</address>
XSD 文件:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!--definition of simple elements -->
<xs:element name="name" type="xs:string"/>
<xs:element name="phone" type="xs:string"/>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="origin" type="xs:string"/>
<xs:element name="zip" type="xs:string"/>
<!--definition of attributes elements -->
<!--definition of complex elements-->
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element ref="contact"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="contact">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="phone"/>
<xs:element ref="street"/>
<xs:element ref="city"/>
<xs:element ref="origin"/>
<xs:element ref="zip"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
您的 XML 中有多个 contact
元素,但 Schema 只允许一个,因为有属性:
minOccurs
和 maxOccurs
。默认情况下它们等于 1.
所以...将您的架构更改为:
<!--definition of complex elements-->
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element ref="contact" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
P.S。请记住,minOccurs="1" 要求至少有一个元素。如果那里根本没有联系方式,那么 minOccurs="0"
.
也不推荐 maxOccurs="unbounded",因为可能 "infinite XML attack"。
最好将它设置为一些大但实际的 maxValue。例如 maxOccurs="1000"
.