Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSD以确保元素X前面有元素Y_Xml_Xsd - Fatal编程技术网

Xml XSD以确保元素X前面有元素Y

Xml XSD以确保元素X前面有元素Y,xml,xsd,Xml,Xsd,我正在解析一个XML文档,我想确保每个元素前面都有,条件是它们之间没有 我知道如何使用XPath实现这一点,但我无法找到使用XSD实现这一点的方法。有办法吗?我是在使用正确的工具进行作业,还是应该使用脚本“验证”作业?这可能会起作用: <xs:element name="container"> <xs:complexType> <xs:choice maxOccurs="unbounded" minOccurs="0"> <xs

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

我知道如何使用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困住了,这个问题无法解决。纯粹出于说教的目的,您认为下面的代码可以工作吗?谢谢