简单的XML Schema到XSD验证

时间:2017-04-17 23:53:21

标签: xml xsd xsd-validation

我试图弄清楚这个问题的解决方案,但似乎无法找到它。 这只是一个简单的XSD,XML文件格式。 我一直得到的错误是:错误:元素'联系':不期望这个元素。

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>

1 个答案:

答案 0 :(得分:0)

您的XML中有多个contact元素,但Schema只允许一个,因为有属性:

minOccursmaxOccurs。默认情况下,它们等于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"

由于“无限XML攻击”的可能性,不建议使用maxOccurs =“unbounded”。 最好将它设置为一些大而实际的maxValue。例如maxOccurs="1000"