【问题标题】:xsd choice for multiple elements多个元素的 xsd 选择
【发布时间】:2013-02-11 22:33:51
【问题描述】:

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

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

 or 

<root>
<empno>b<empno>
<designation>ase</designation>
</root>

是否可以使用“选择”指示器为上述创建 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>

这样可以吗?

【问题讨论】:

    标签: xsd xsd-validation choice


    【解决方案1】:

    是的,您快到了.. 只是缺少一个 sequence .. 因为它是一组字段,您必须将它们包装在序列中..

    这些序列标签将在&lt;Choice&gt; 标签下。现在将验证这组标签(序列)中的任何一个。

    <?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 ..

    希望对你有帮助..

    【讨论】:

    • 感谢您的解释。我试图解析一个简单的 xml 文件。实际上,我希望只看到第一个元素或第二个元素中的一个选项。但是我的 dom 解析器同时读取了它们。我混淆了不同的术语吗?
    • 如果您只想查看其中一个选项,请不要在&lt;choice&gt; 中使用&lt;sequence&gt; :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2016-06-03
    • 2023-01-25
    相关资源
    最近更新 更多