0

我正在尝试编写一个 XSD 来验证 XML,其中必须满足以下条件:

一个元素(父)包括:

  • “Choice1”或“Choice2”元素
  • 加上任何或所有“Field1”、“Field2”、“Field2”(等)
  • 以上字段可以按任意顺序出现

因此,例如,有效的 XML 将是:

<Parent>
  <Choice1>xxx</Choice1>
  <Field1>yyy</Field1>
  <Field2>yyy</Field2>
</Parent>

就像:

<Parent>
  <Field3>yyy</Field3>
  <Choice2>xxx</Choice2>
  <Field2>yyy</Field2>
</Parent>

无效将是:

<Parent>
  <Field3>yyy</Field3>
  <Field2>yyy</Field2>
</Parent>

我似乎无法按照我的意愿嵌套 xs:choice 和 xs:all 。

4

1 回答 1

2

是的,<xs:choice>不能直接插入<xs:all>。但是您可以使用替换组来实现相同的效果:

<xs:element name="Parent">
  <xs:complexType>
    <xs:all>
      <xs:element ref="Choice" minOccurs="1"/>

      <xs:element name="Field1" type="xs:string"/>
      <xs:element name="Field2" type="xs:string"/>
    </xs:all>
  </xs:complexType>
</xs:element>

<xs:element name="Choice" abstract="true"/>
<xs:element name="Choice1" substitutionGroup="Choice"> ... </xs:element>
<xs:element name="Choice2" substitutionGroup="Choice"> ... </xs:element>
于 2013-09-17T15:07:12.427 回答