首页 > 解决方案 > 比较 XPath 中的两个节点

问题描述

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

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

给我一个节点和

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

给我另一个。

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

我正在这样做

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

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

标签: xpathabstract-syntax-treepmd

解决方案


您比较的值类型有问题

@MethodName是一个字符串。

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

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

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

所以你的 XPath 应该看起来像

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

推荐阅读