假设我有这个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]]
但是我没有看到任何方法来构建一个xpath,它比较了两个不同元素“e”的两个不同属性。在xpath语法中是否有一种方法,还是没有希望?
答案 0 :(得分:2)
单个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)]