xsd选择多个元素

Pra*_*har 19 xsd choice xsd-validation

我希望我的Xml文件如下所示

<root>
<name>a</name>
<age>23</age>
</root>

 or 

<root>
<empno>b<empno>
<designation>ase</designation>
</root>
Run Code Online (Sandbox Code Playgroud)

是否可以使用"选择"指示器为上面的内容创建XML模式?如下所示.

    <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>
Run Code Online (Sandbox Code Playgroud)

有可能这样做吗?

Inf*_*nd' 35

是的,你几乎就在那里..只是错过了sequence..因为它是一组字段,你必须将它们包装在序列之下.

这些序列标签将在<Choice>标签下.现在将验证这些标签集(序列)中的任何一个.

<?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>
Run Code Online (Sandbox Code Playgroud)

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

我想在此补充一点建议:

我观察到你使用嵌套声明..像这样:

<?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>
Run Code Online (Sandbox Code Playgroud)

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

<?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>
Run Code Online (Sandbox Code Playgroud)

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

希望能帮助到你..

  • 如果您只想查看其中一个选项,请不要在 `&lt;choice&gt;` 中使用 `&lt;sequence&gt;` :) (2认同)