比较 XPath 中的两个节点

Comparing two nodes in XPath

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

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

给我一个节点

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

再给我一个。

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

我正在做这个

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

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

您对正在比较的值类型有疑问

@MethodName 是一个字符串。

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

所以当比较两者时,它总是错误的。您想获取第二个选择器中方法节点的名称,以便比较字符串。你可以这样做...

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

所以你的 XPath 应该看起来像

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