我正在编写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]