【问题标题】:Need any element among unordered children需要无序子元素中的任何元素
【发布时间】:2015-07-02 13:30:24
【问题描述】:

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

例如,如果 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 文件,我收到这样的错误:

元素“fruits”的子元素“anything”无效。

你有什么建议吗?

【问题讨论】:

    标签: xml xsd xsd-validation


    【解决方案1】:

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

    你不能同时拥有它。 XSD 并不像您期望的那样正交。

    【讨论】:

    【解决方案2】:

    尝试使用 any 元素。

    any 元素使作者能够扩展 XML 文档 架构未指定的元素。

    根据文档,您将需要使用序列而不是全部,因为 any 的唯一有效父元素是选择和序列。

    【讨论】:

    • 是的,我试过了,但正如你所说, 元素不允许出现在 元素中。而且我需要保留 ,因为我的子元素可以按任何顺序出现...
    • 我想您可以将具有 minOccurs=0 的任何元素放在每个必需元素之间?这将有效地允许任何订购
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多