2

我有一个模式需要允许两组元素之一或多次:

<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。

4

1 回答 1

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>
于 2014-07-25T01:05:01.437 回答