XSD模式用于元素的不同顺序和出现为无界

时间:2019-01-11 00:47:08

标签: xml xsd xsd-validation

下面是2个XML文件示例

<Parent>
    <Child1>
        <Child2> value</Child2>
        <Child1>
            <Child2>value<Child2>
            <Child3> value </Child3>
            <Child4> value </Child4>
        </Child1>
        <Child1>
            <Child2>value<Child2>
            <Child4> value </Child4>
        </Child1>
    </Child1>
</Parent> 

<Parent>
    <Child1>
        <Child2> value</Child2>
        <Child3> value </Child3>
        <Child1>
            <Child4> value </Child4>
            <Child2>value<Child2>
            <Child3> value </Child3>
        </Child1>
    </Child1>
</Parent>

元素可以是任意顺序,也可以有任意数量的序列

该模式定义为:

<xs:complexType name="Child1">
    <xs:sequence minOccurs="0" >
      <xs:element type="xs:string" name="Child2" minOccurs="0" maxOccurs="unbounded" />
      <xs:element type="xs:string" name="Child3" maxOccurs="unbounded" minOccurs="0" />
      <xs:element type="xs:string" name="Child1" minOccurs="0" maxOccurs="unbounded" />
      <xs:element type="xs:string" name="Child4" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="Parent">
    <xs:sequence>
      <xs:element type="Child1" name="Child1" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

我遇到的问题是: 1.元素可以按不同顺序排列。但是由于我将其设置为xs:sequence,因此必须按照特定的顺序进行 2.如果更改为xs:all以便允许元素的不同顺序,则我无法将maxOccurs设置为无界,因为xs:all不允许这样做。

有没有办法让元素和maxOcurance的不同顺序不受限制?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用xs:choice:

`

<xs:complexType name="Child1">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element type="xs:string" name="Child2" />
      <xs:element type="xs:string" name="Child3" />
      <xs:element type="xs:string" name="Child1"/>
      <xs:element type="xs:string" name="Child4" />
    </xs:choice>
</xs:complexType>

`