假设我有这个 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/