在具有相同名称的两个XSD组之间进行选择

时间:2014-07-24 22:32:38

标签: .net xml xsd xsd-1.0

我有一个模式需要允许两组元素中的一组:

<xs:element name="Parent" maxOccurs="99">
  <xs:complexType>
    <xs:choice>
      <xs:sequence>
        <xs:element name="Address" type="xs:string" />
        <xs:element name="City" type="xs:string" />
        <xs:element name="State" type="xs:string" />
        <xs:element name="Zip" type="xs:string" />
      </xs:sequence>
      <xs:sequence>
        <xs:element name="Address" type="xs:string" />
        <xs:element name="State" type="xs:string" />
        <xs:element name="Zip" type="xs:string" />
        <xs:element name="Country" type="xs:string" />
      </xs:sequence>
    </xs:choice>
  </xs:complexType>
</xs:element>

但验证似乎总是出现在第一个选择中(它会说Missing Element City)。我怎样才能做到这一点?我使用的是.NET XSD 1.0,但我无法更改XML。

1 个答案:

答案 0 :(得分:2)

这很有用。如果有人想要提供更好的解决方案或进一步详细说明,我会暂时不接受这篇文章的回复。

<xs:group name="SharedElements">
  <xs:sequence>
    <xs:element name="Address" type="xs:string" />
  </xs:sequence>
</xs:group>
<xs:group name="NationalElements">
  <xs:sequence>
    <xs:element name="city" type="xs:string" />
    <xs:element name="State" type="xs:string" />
    <xs:element name="Zip" type="xs:string" />
  </xs:sequence>
</xs:group>
<xs:group name="InternationalElements">
  <xs:sequence>
    <xs:element name="State" type="xs:string" />
    <xs:element name="Zip" type="xs:string" />
    <xs:element name="Country" type="xs:string" />
  </xs:sequence>
</xs:group>

<xs:element name="Parent" maxOccurs="99">
  <xs:complexType>
    <xs:sequence>
      <xs:group ref="SharedElements" />
      <xs:choice>
        <xs:group ref="NationalElements" />
        <xs:group ref="InternationalElements" />
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
</xs:element>