我正在尝试验证 XML 文档中存在的所有元素的属性的唯一性。
示例 XML:
<exampleXml>
<a id="1"/>
<a id="2">
<b id="1"/>
</a>
</exampleXml>
我的 XSD 架构:
<xs:schema elementFormDefault="qualified">
<xs:element name="exampleXml">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="a">
<xs:complexType>
<xs:complexContent>
<xs:extension base="baseRuleType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="b">
<xs:complexType>
<xs:complexContent>
<xs:extension base="baseRuleType"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="duplicateIdsForbidden">
<xs:selector xpath="//"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
<xs:complexType name="baseRuleType">
<xs:attribute name="id" use="optional"/>
</xs:complexType>
</xs:schema>
xpath 是这里的问题。我想匹配根下的每个元素,但上面的选择器 xpath 返回:
Element '{http://www.w3.org/2001/XMLSchema}selector', attribute 'xpath': The XPath expression '//' could not be compiled
我可以将 xpath 更改为“*”,但这只会验证作为根的直接后代元素的 id 属性。
我正在使用 DOMDocument::schemaValidate()
在 PHP 中使用 lib_xml 验证这一点。非常感谢任何帮助。
最佳答案
使用 <xs:selector xpath=".//*"/>
.
关于php - 使用 XSD 跨 XML 文档验证属性唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6706233/