xml - 用于比较两个元素的两个不同属性的 XPath

标签 xml xpath

假设我有这个 XML:

<x>
<e s="1" t="A"/>
<e s="2" t="A"/>
<e s="1" t="B"/>
</x>

有什么方法可以编写一个 xpath 来查找是否有两个名为“e”的不同节点,它们具有相同的 @s 值但不同的 @t 值。第一部分很简单:

//e[@s = //e/@s] 

第二部分:

//e[@t != //e[@t]]

但我看不出有什么方法可以构建比较两个单独元素“e”的两个不同属性的 xpath。 xpath 语法中有没有办法,还是没有希望?

最佳答案

无法通过单个 XPath 1.0 表达式选择请求的节点

如果宿主语言是 XSLT 1.0,则可以构建使用 current() 函数的表达式,选择所需的节点。

使用以下 XPath 2.0 表达式:

for $x
           in
             /*/e[@s
                 = (preceding-sibling::e
                   |
                    following-sibling::e
                    )
                     /@s
                ],

           $y in /*/e[@s = $x/@s]

         return
            $x[not(@t = $y/@t)]

关于xml - 用于比较两个元素的两个不同属性的 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052437/

相关文章:

java - 如何使用 xml 正文调用 REST api

python - 使用标签上的值将 xml 转换为字典

Python/Xpath 转换查询

python - 消息: element not visible when tring to click a checkbox through Selenium and Python

php xml 严重错误

php - 使用 php 将 .xls 文件转换为 xml

java - 使用Java代码执行放在xml文件中的sql

java - 基于 XPATH 的 html 页面内容提取

java - 使用 Selenium/java 读取 html 表行的单元格时第一个值为空

python - 使用 Python XPath 表达式提取文本