没有序列和多个的XML模式发生

时间:2013-03-20 06:12:12

标签: xml xml-parsing xsd

  1. 我需要创建一个用于验证XML文件的模式。
  2. Mother标记内的元素可以是SonDaughter
  3. SonDaughter元素没有任何序列。
  4. Son不能是我的多元素(只有一个儿子)。
  5. Daughter可以是多个(多个女儿)。
  6. 所以我的问题是如何为此编写XML模式。这就是我写的。我还尝试<xsd:all><xsd:sequence>,而不是<xsd:choice>。但我无法弄清楚如何克服这个问题。

    <xsd:complexType name="Mother">     
     <xsd:all>
      <xsd:element name="Son" type="string" minOccurs="0" maxOccurs="1"/>
      <xsd:element name="Daughter" type="string" minOccurs="0" maxOccurs="1"/>
     </xsd:all>
    </xsd:complexType>
    

    -------------------------------这些是正确的XML文件---------- ----------------------

    有多个女儿

    <Mother>
    <Son>Jhon</Son>
    <Daughter>Rose</Daughter>
    <Daughter>Ann</Daughter>
    </Mother>
    

    具有不同的序列

    <Mother>
    <Daughter>Rose</Daughter>
    <Son>Jhon</Son>
    <Daughter>Ann</Daughter>
    </Mother>
    

    没有儿子或没有女儿或没有女儿

    <Mother>
    <Daughter>Rose</Daughter>
    </Mother>
    

1 个答案:

答案 0 :(得分:1)

在这种特殊情况下,您可以将sequence作为零个或多个Daughter元素,然后是零或一个Son,然后是另外零个或多个Daughter小号

<xsd:complexType name="Mother">     
 <xsd:sequence>
  <xsd:element name="Daughter" type="string" minOccurs="0" maxOccurs="unbounded"/>
  <xsd:element name="Son" type="string" minOccurs="0" maxOccurs="1"/>
  <xsd:element name="Daughter" type="string" minOccurs="0" maxOccurs="unbounded"/>
 </xsd:sequence>
</xsd:complexType>

如果元素内容比字符串更复杂,我倾向于声明单独的顶级元素并使用<xsd:element ref="Daughter" minOccurs=....

引用它们