首页 > 解决方案 > 一组元素中的一个元素在另一个元素之前的 XSD?

问题描述

父元素的子元素必须有一个元素(组外)后跟另一个特定元素。

<xsd:element name="elementContainer">
    <xsd:element name="element1">
    <xsd:element name="element2">
    <xsd:element name="element3">
    <xsd:element name="element4">
    <xsd:element name="element5">
    <xsd:element name="element6">
    <xsd:element name="proceedingElement">
</xsd:element>

我想修改上面的 XSD,以便必须有一个元素(1-6),然后是后续元素。

我已经尝试围绕元素 1 到 6 进行选择,但这并没有被验证所接受。

<xsd:element name="elementContainer">
    <xsd:choice minOccurs="1">
        <xsd:element name="element1">
        <xsd:element name="element2">
        <xsd:element name="element3">
        <xsd:element name="element4">
        <xsd:element name="element5">
        <xsd:element name="element6">
    </xsd:choice>
    <xsd:element name="proceedingElement">
</xsd:element>

对于以下两个示例,我希望第一个通过验证,第二个失败。

<elementContainer>
    <element2/>
    <proceedingElement/>
</elementContainer>

<elementContainer>
    <proceedingElement/>
</elementContainer>

如果有帮助,甚至可以忽略存在一个进行元素的事实,因此只需确保六个元素中的至少一个元素存在就可以了。

标签: xmlxsdxsd-validationxml-validation

解决方案


您对 . 有正确的基本概念xsd:choice,但是您的 XSD 存在许多问题:

  • xsd:element元素未关闭。
  • xsd:complexType并且xsd:sequence失踪了。

通过对上述问题的更正,并删除 default xsd:choice/@minOccurs = 1,此 XSD,

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > 
  <xsd:element name="elementContainer">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice>
          <xsd:element name="element1"/>
          <xsd:element name="element2"/>
          <xsd:element name="element3"/>
          <xsd:element name="element4"/>
          <xsd:element name="element5"/>
          <xsd:element name="element6"/>
        </xsd:choice>
        <xsd:element name="proceedingElement"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

根据要求,将要求有一个element1throughelement6后跟一个proceedingElement


推荐阅读