XSD确保元素X前面有元素Y.

时间:2015-06-30 17:58:42

标签: xml xsd

我正在解析XML文档,我想确保每个元素<element2>前面都有<element1>,条件是它们之间没有<element3>

我知道如何使用XPath做到这一点,但我无法想办法用XSD做到这一点。有办法吗?我是否使用正确的工具来完成工作,或者我应该用脚本“验证”它?

2 个答案:

答案 0 :(得分:2)

通常将此表达为元素的内容模型的约束,该元素是element1,element2和element3的父元素。

通常你会说在element1和element3之间会出现哪些元素,但如果它确实是element3之外的任何元素,那么在XSD 1.1中你可以将内容模型定义为

strtod

答案 1 :(得分:0)

这可能有效:

<xs:element name="container">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded" minOccurs="0"> 
      <xs:element name="element1"/>
      <xs:element name="element2"/>
      <xs:element name="element3"/>
    </xs:choice>
    <xs:assert test="generate-id(element2/preceding-sibling::element1[1][following-sibling::element3[1]) 
                  eq generate-id(element2/following-sibling::element3[1])" />
  </xs:complexType>
</xs:element>