如何为PMD Xpath规则设置嵌套条件

时间:2012-01-25 05:46:43

标签: xpath pmd

我的规则要求我将它们仅应用于没有“获取”作为其名称一部分的方法。换句话说,我的规则只需要应用于类中的非getter方法。我知道要掌握所有非getter方法,我可以使用

//MethodDeclarator[not(contains(@Image,'get'))]

但是,我不知道我在哪里插入规则逻辑的语法。是吗

//MethodDeclarator[
not(contains(@Image,'get'))

 'Some Rule Statements' 
]

我看到了使用。在一些示例代码中的[]内部语句的开头。它们用于什么?

在我的特殊情况下,我需要将以下各个部分组合在一起,但到目前为止我还无法完成它。

第1部分:

 //PrimaryExpression[not(PrimarySuffix/Arguments)]

第2部分:

 //MethodDeclarator[not(contains(@Image,'get'))]

第3部分:

 //PrimaryExpression[PrimaryPrefix/@Label='this']

1 个答案:

答案 0 :(得分:1)

您需要至少掌握一些XPath的基本知识/理解

  

我在一些内部的[]内部的语句开头看到了.的使用   示例代码。它们用于什么?

[]称为谓词。它必须包含布尔表达式。它必须立即进行节点测试。这为满足要选择的节点测试的节点指定了附加条件。

例如

/*/num

选择名为num的所有元素,这些元素是XML文档顶部元素的子元素。

但是,如果我们只想选择其值为奇数的num个元素,我们会在谓词中添加这个附加条件:

/*/num[. mod 2 = 1]

现在,最后一个表达式选择名为num的所有元素,这些元素是XML文档的顶部元素的子元素,其字符串值表示奇数。

.表示上下文节点 - 这是迄今为止已选择的节点(或评估完整XPath表达式的起始节点)。

  

在我的特殊情况下,我需要将以下各个部分组合在一起......

你忘了说三种表达方式应该以何种方式组合起来。在XPath中,一些常用的“组合器”是运算符andor和函数not()

例如,如果要选择由所有三个提供的XPath表达式选择的元素,则可以使用and运算符:

//PrimaryExpression
   [not(PrimarySuffix/Arguments)
  and
    PrimaryPrefix/@Label='this'
   ]