java - XML 架构以无序模式显示元素

标签 java c# xml xsd

我有一个架构 XSD 文件,其中包含序列中列出的元素。问题是 Sequence 强制 XML 文件按顺序列出元素。现在,我想使用 choice 标签。但根据 xml 规范,choice 只允许声明中包含的元素之一出现在包含元素中。另外,我无法使用所有标签,因为我希望出现多次。但是我要 显示无序模式中的所有A、B、C、D和E。有什么建议吗?

Xml 架构文件

<xsd:complexType>
    <xsd:sequence>
        <xsd:element name="A" />
        <xsd:element name="B" />
        <xsd:element name="C" />
        <xsd:element name="D" />
        <xsd:element name="E" />
    </xsd:sequence>
</xsd:complexType>

XML 文件(我希望这些元素按任意顺序排列)

<a>a</a>
<b>b</b>
<c>c</c>
<d>d</d>
<e>e</e>

最佳答案

这个XSD,

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="r">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="A" />
        <xsd:element name="B" />
        <xsd:element name="C" />
        <xsd:element name="D" />
        <xsd:element name="E" />
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

将验证元素A通过E作为r的 child 以任意顺序和任意次数出现。

说明

xsd:choice 的出现约束元素允许选择本身重复指定的次数。因此,您可以在子元素之间进行零次选择,并获得 r 的空内容模型。 。这一次,您可以选择任何一个 child 。第二次时,您可以选择与第一次相同的 child ,或任何其他 child 。正如您所看到的,这种连续操作允许任意数量的子元素以任意顺序出现。

示例

以下所有 XML 文档都对上述 XSD 有效:

  • <r></r>
  • <r><A/><A/></r>
  • <r><A/><A/><A/></r>
  • <r><A/><B/><A/><C/><A/><D/><A/><E/><A/></r>
  • <r><E/><D/><C/><B/><A/></r>

关于java - XML 架构以无序模式显示元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42934223/

相关文章:

c# - Rx TestScheduler 在后台线程计划操作时抛出空引用异常

c# - 当鼠标指向窗口的顶部位置时如何触发事件?

c# - 制作一个完全透明的矩形(窗口中的一个洞)WPF

xml - 根据 XSD 中的属性值制作必需的 XML 元素

java - 未找到 JSP 2 标记文件 “/WEB-INF/tags”

java - java中类层次结构中的类是如何初始化的?

java - 您可以在 Canvas 上使用红色或蓝色和背景图像进行绘制

c++ - 如何使用 TinyXml 解析特定元素

java - HashMap、LinkedHashMap 和 ConcurrentHashMap 在创建 Map 和基于特定键获取值时的执行成本

java - 如何比较java中的两个日期?