首页 文章

XPath比较两个元素的两个不同属性

提问于
浏览
4

假设我有这个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语法中有没有办法,还是没有希望?

1 回答

  • 2

    The requested nodes cannot be selected by a single XPath 1.0 expression .

    如果托管语言是XSLT 1.0,则可以构造使用 current() 函数的表达式,该表达式选择所需的节点 .

    Use the following XPath 2.0 expression:

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

相关问题