XSD:仅在该元素首次出现后才允许该元素内有不同的元素

XSD: Allowing different elements inside an element only after the first appearance of that element

我有一个关于 XSD 的问题。如果元素已经出现,是否可以在一个元素中允许不同的元素?

假设我有这个结构:

<entry>
    <col>
        <b></b>
    </col>
    <col>
        <a></a>
        <b></b>
    </col>
</entry>
  <xs:element name="col">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="a" />
        <xs:element ref="b" />
      </xs:choice>
    </xs:complexType>
  </xs:element>

目前每次都可以设置<a>元素。但是我只想允许设置一个 <a> 元素,前提是 <col> 元素之前至少出现过一次。

这可能有帮助:

创建一个变量来计算 <col>

的数量
<xsl:variable name="colCount" select="count(/entry/col)" />

<xsl:variable name="colCount" select="count(//col)" />

然后检查<col>的个数是否至少为1,如果是,则添加<a>

<xs:choice minOccurs="0" maxOccurs="unbounded">
    <xsl:if test="$colCount &gt; 0">
        <xs:element ref="a" />
    </xsl:if>
    ...