比较 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]
我正在编写一个 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]