比较XPath中的两个节点

问题描述 投票:0回答:1

我正在编写Xpath查询以用作PMD中的规则。现在

//Method/ModifierNode[Annotation[@Image = 'Future']]/..[@Image = 'randomMethod']]

给我一个节点,然后

//ForEachStatement
    //MethodCallExpression
        [@MethodName = 'randomMethod']

给我另一个。

我想比较这两个,看看第一个查询中的节点名称和第二个查询中的节点名称是否相同。

我正在这样做

//ForEachStatement
    //MethodCallExpression
        [@MethodName = //Method/ModifierNode[Annotation[@Image = 'Future']]/..[@Image]]

这根本不起作用,并且返回零个匹配节点。

xpath abstract-syntax-tree pmd
1个回答
0
投票

您比较的值类型有问题

@MethodName是字符串。

[//Method/ModifierNode[Annotation[@Image = 'Future']]/..[@Image]选择一个节点(确保其具有非空图像)。

因此,当两者都比较时,它将始终为假。您想要在第二个选择器中获取方法节点的名称,以便可以比较字符串。您可以这样做...

//Method/ModifierNode[Annotation[@Image = 'Future']]/../@Image

所以您的XPath应该看起来像

//ForEachStatement
    //MethodCallExpression
        [@MethodName = //Method/ModifierNode[Annotation[@Image = 'Future']]/../@Image]
© www.soinside.com 2019 - 2024. All rights reserved.