Xml XSD以确保元素X前面有元素Y
我正在解析一个XML文档,我想确保每个元素Xml XSD以确保元素X前面有元素Y,xml,xsd,Xml,Xsd,我正在解析一个XML文档,我想确保每个元素前面都有,条件是它们之间没有 我知道如何使用XPath实现这一点,但我无法找到使用XSD实现这一点的方法。有办法吗?我是在使用正确的工具进行作业,还是应该使用脚本“验证”作业?这可能会起作用: <xs:element name="container"> <xs:complexType> <xs:choice maxOccurs="unbounded" minOccurs="0"> <xs
前面都有
,条件是它们之间没有
我知道如何使用XPath实现这一点,但我无法找到使用XSD实现这一点的方法。有办法吗?我是在使用正确的工具进行作业,还是应该使用脚本“验证”作业?这可能会起作用:
<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>
通常将其表示为元素1、元素2和元素3的父元素的内容模型上的约束 通常您会说什么元素可以出现在element1和element3之间,但如果它确实是element3之外的任何元素,那么在XSD1.1中,您可以将内容模型定义为
<xs:element name="element1"/>
<xs:any not-QName="element3" minOccurs="0"/>
<xs:element name="element2"/>
如果您知道如何使用XPath,那么您就知道如何使用XSD 1.1中的断言。如果您仅限于XSD 1.0,那么您仅限于以设置的方式按顺序排列特定元素。@kjhughes我在下面用XSD 1.1进行了尝试,但问题是我找不到Python或PHP的1.1解析器。我似乎被1.0困住了,这个问题无法解决。纯粹出于说教的目的,您认为下面的代码可以工作吗?谢谢