xml - 您如何制作一系列必须在 XML 模式中按顺序排列的可选项目?

标签 xml schema xsd sequence

我想做的是在 XML 模式中创建一个序列元素,这样内容必须按顺序排列,但可能不会全部出现。例如,架构将是这样的:

<xs:element name="rods" maxOccurs="1" minOccurs="1">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="green" type="xs:positiveInteger" />
   <xs:element name="white" type="xs:positiveInteger" />
   <xs:element name="blue" type="xs:positiveInteger" />
   <xs:element name="yellow" type="xs:positiveInteger" />
   <xs:element name="red" type="xs:positiveInteger" />
   <xs:element name="tan" type="xs:positiveInteger" />
   <xs:element name="gray" type="xs:positiveInteger" />
   <xs:element name="black" type="xs:positiveInteger" />
  </xs:sequence>
 </xs:complexType>
</xs:element>

并且允许这样的 XML:

<rods>
 <green>142</green>
 <white>34</white>
 <gray>65</gray>
</rods>

MSDN 对此有如下说法:

The following example shows an element (zooAnimals) that can have zero or more of the following elements, elephant, bear, giraffe, in the sequence element.

<xs:element name="zooAnimals">
      <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
               <xs:element name="elephant"/>
               <xs:element name="bear"/>
               <xs:element name="giraffe"/>
            </xs:sequence>
      </xs:complexType>
</xs:element>

W3Schools 建议相同。 但是,visual studio 和在线验证服务都不喜欢建议的内容。

这是我目前拥有的:

<xs:element name="rods" maxOccurs="1" minOccurs="1">
 <xs:complexType>
  <xs:sequence minOccurs="0" maxOccurs="1">
   <xs:element name="green" type="xs:positiveInteger" />
   <xs:element name="white" type="xs:positiveInteger" />
   <xs:element name="blue" type="xs:positiveInteger" />
   <xs:element name="yellow" type="xs:positiveInteger" />
   <xs:element name="red" type="xs:positiveInteger" />
   <xs:element name="tan" type="xs:positiveInteger" />
   <xs:element name="gray" type="xs:positiveInteger" />
   <xs:element name="black" type="xs:positiveInteger" />
  </xs:sequence>
 </xs:complexType>
</xs:element>

这是 XML:

<rods>
 <green>142</green>
 <white>34</white>
 <gray>65</gray>
</rods>

Visual Studio 2005 声称“灰色”无效,“蓝色”是预期的,所以很明显它想要所有的 child

谢谢,

埃里克

最佳答案

<xs:element name="rods">
    <xs:complexType>
        <xs:sequence>
                <xs:element minOccurs="0" name="green" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="white" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="blue" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="yellow" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="red" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="tan" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="gray" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="black" type="xs:positiveInteger" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

关于xml - 您如何制作一系列必须在 XML 模式中按顺序排列的可选项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/931622/

相关文章:

xml - Odoo Qweb t 值字符串中的新行

java - 验证 XML 是否为 DOM 文档

wordpress - 如何在 WooCommerce 中的产品结构化数据 (Schema.org) 中添加产品图像和描述

performance - MongoDB:通过嵌套键与顶级键查找

xml - XSD 规范中词汇表示与规范表示之间的区别

java - cvc-elt.1 : Cannot find the declaration of element 'countries'

java - 我如何在 jaxb 中解码并在不使用显式模式文件的情况下享受模式验证

java - struts2中如何获取xml作为响应

带有两个 ListView 的 Android LinearLayout

c# - 在 C# 中从 SOAP 信封中提取 XML