如何在XSD中强制使用每种类型的孩子?

时间:2012-11-29 11:04:26

标签: xsd

我有两种类型的地址,这两种地址都需要存在并且都嵌套在父地址中。有没有办法可以强制每种地址类型中的一种而不重新定义所有字段两次?

 <xs:element name="addresses">
    <xs:complexType>
  <xs:sequence>
    <xs:element name="address" maxOccurs="2" minOccurs="2"> <!-- MUST BE ONE OF EACH ADDRESS TYPE - Invoice AND Delivery -->
      <xs:complexType>
        <xs:sequence>
          <xs:element type="xs:string" name="addresstype">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="I"/>
                  <xs:enumeration value="D"/>
                </xs:restriction>
              </xs:simpleType>
          </xs:element>
          <xs:element type="xs:string" name="addresscode"/>
          <xs:element type="xs:string" name="name"/>
          <xs:element type="xs:string" name="line1"/>
          <xs:element type="xs:string" name="line2"/>
          <xs:element type="xs:string" name="line3"/>
          <xs:element type="xs:string" name="line4"/>
          <xs:element type="xs:string" name="line5"/>
          <xs:element type="xs:string" name="postcode"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>
</xs:element>

1 个答案:

答案 0 :(得分:0)

使用XSD无法实现此要求!我认为即使两次定义所有字段也不可能!因为如果你尝试两次定义父<address>,我猜它最终会显示错误,“一个元素只能有一个(复杂或简单)类型”!