php - 使用 XSD 跨 XML 文档验证属性唯一性

标签 php xml xpath xsd libxml2

我正在尝试验证 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/

相关文章:

javascript - 使用 E4X 处理通过 Ajax 返回的 XML?

c# GetElementsByTagName 然后如何读取内部标签值

php - 如何在 MySQL 中选择除一个以外的所有不同值?

php - 如何修复通知: Undefined index in PDO

c# - 使用不带属性的 DataContractSerializer 或 XmlSerializer 删除所有命名空间

php - Xpath 代码在 firepath 中有效,但在 php 脚本中无效

javascript - 无法使用 Selenium JavaScript 单击按钮

xml - 使用 for-each-group 进行 XSLT 嵌套分组

php - mySQL 查询不存在

php - 将 CGI 命令行参数传递给 PHP 文件