在无序的孩子中需要任何元素

时间:2015-07-02 13:30:24

标签: xml xsd xsd-validation

我需要验证是否存在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'具有无效的子元素'nothing'。

你有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

你无法双管齐下。 XSD与您的期望不一样正确。

答案 1 :(得分:0)

尝试使用any元素。

  

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

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