XSD for XML,包含不同类型的列表

时间:2012-03-16 21:01:26

标签: xml xsd

请告诉我,如何创建xsd架构,它成功验证了以下xml: ---> XML 1

    <?xml version="1.0" encoding="UTF-8"?>
<start xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd">
  <list>
    <typeA>
      <value>test string value 123</value>
    </typeA>
    <typeB>
      <value>test string value 456</value>
    </typeB>
    <typeC>
      <value>test string value 789</value>
    </typeC>
  </list>
</start>

---&GT; XML 2

    <?xml version="1.0" encoding="UTF-8"?>
<start xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd">
  <list>
    <typeB>
      <value>test string value 456</value>
    </typeB>
    <typeC>
      <value>test string value 789</value>
    </typeC>
  </list>
</start>

---&GT; XML 3

    <?xml version="1.0" encoding="UTF-8"?>
<start xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd">
  <list>
    <typeC>
      <value>test string value 789</value>
    </typeC>
    <typeC>
      <value>test string value 123</value>
    </typeC>
  </list>
</start>

---&GT; XML 4

    <?xml version="1.0" encoding="UTF-8"?>
<start xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd">
  <list>
    <typeC>
      <value>test string value 789</value>
    </typeC>
  </list>
</start>

我写XSD,但它不起作用:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="typeC">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="value" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="typeB">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="value" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="typeA">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="value" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="start">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="list"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="list">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="typeA"/>
                <xs:element ref="typeB"/>
                <xs:element ref="typeC"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

还有其他方法可以达到这个目的吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您已定义包含元素typeA,typeB和typeC的方式设置为必须包含一个且恰好包含其中一个元素。听起来你希望它更灵活,以便可以包含0或许多元素。查看 maxOccurrs minOccurs 属性。