需要无序children中的任意元素

Need any element among unordered children

我需要验证 XML 元素的 children 列表是否存在,但我还需要允许 child 元素之一是任何其他元素。

例如,如果 XML 是这样的:

<fruits>
  <item1>banana</item1>
  <item2>apple </item2>
  <anything>yolo</anything>
</fruits>

还有像这样的 XSD :

<xsd:complexType name="fruits">
  <xsd:all>
    <xsd:element name="item1" type="xsd:string" minOccurs="1" maxOccurs="1" />
    <xsd:element name="item2" type="xsd:string"  minOccurs="1" maxOccurs="1" />
  </xsd:all>
</xsd:complexType>

我希望这个 xml 文件能够通过验证。但是对于我的 xsd 文件,我得到这样的错误:

The element 'fruits' has invalid child element 'anything'.

你有什么建议吗?

尝试使用任意元素。

The any element enables the author to extend the XML document with elements not specified by the schema.

根据文档,您需要使用 sequence 而不是 all,因为 any 的唯一有效父元素是 choice 和 sequence。

您可以放弃无序要求并在 xs:sequence 中使用 xs:any,或者您可以满足无序要求并在 xs:any 元素周围使用固定包装元素xs:all.

你不能两全其美。 XSD 并不像您期望的那样正交。