XSD验证—针对多个元素的XSD选择



我希望我的Xml文件看起来像下面的

<root>
    <name>a</name>
    <age>23</age>
</root>
 or 
<root>
    <empno>b<empno>
    <designation>ase</designation>
</root>

是否可以使用"choice"指标?如下所示

<xsd:element name="root">
<xsd:complexType>
<xsd:choice>
<xsd:element name="name"/>
<xsd:element name="age" />
     or
<xsd:element name="empno"/>
<xsd:element name="designation" />
<xsd:choice>
</xsd:complexType>
<xsd:element>

这样做可能吗?

是的,你就快成功了。只是缺少一个sequence…因为这是一组字段,你必须把它们包装在sequence..

这些序列标签将在<Choice>标签下。现在,这组标记(Sequence)中的任何一个都将被验证。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root" type="root"/>
  <xs:complexType name="root">
    <xs:choice>
      <xs:sequence>
        <xs:element name="empno" type="xs:string" />
        <xs:element name="designation" type="xs:string" />
      </xs:sequence>
      <xs:sequence>
        <xs:element name="name" type="xs:string" />
        <xs:element name="age" type="xs:unsignedByte" />
      </xs:sequence>
    </xs:choice>
  </xs:complexType>
</xs:schema>

-----------------------------------------------------------------------------------------

我想在这里再加一个建议:

我注意到你使用了嵌套声明。这样的:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="trunk">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="branch1" type="xs:string"/>
              <xs:element name="branch2" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="other" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

总是喜欢使用自定义类型!这样的:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root" type="root"/>
  <xs:complexType name="root">
    <xs:sequence>
      <xs:element name="trunk" type="trunk"/>
      <xs:element name="other" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="trunk">
    <xs:sequence>
      <xs:element name="branch1" type="xs:string"/>
      <xs:element name="branch2" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

这提高了可读性,您可以重用complexType/simpleType ..

最新更新