2012-01-25 60 views
1

我的規則要求我僅將它們應用於沒有「get」作爲其名稱一部分的方法。換句話說,我的規則只需要適用於班級中的非getter方法。我知道拿到的所有非的getter方法一抱,我可以用如何爲PMD Xpath規則設置嵌套條件

//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

你需要有XPath的至少一些基本知識/理解。

我看到一些 示例代碼在[]內聲明的開頭使用.。他們用於什麼?

[]被稱爲謂詞。它必須包含一個布爾表達式。它必須立即進行節點測試。這爲滿足要選擇節點測試的節點指定了附加條件。

例如

/*/num 

選擇命名爲num屬於XML文檔的頂部元素的子元素的所有元素。

但是,如果我們僅希望選擇這樣num元素,其值是奇數,我們添加此附加條件的謂詞中:

/*/num[. mod 2 = 1] 

現在這最後的表達式選擇命名爲num是所有元素XML文檔的頂部元素的子元素,其字符串值表示奇數整數。

.表示上下文節點 - 這是迄今爲止已選擇的節點(或關閉完成XPath表達式的起始節點)。

在我的特殊情況下,我需要將以下部分組合在一起......

你忘了說以什麼方式/如何組合三個表達式。在XPath中,一些常用的「組合器」是運算符and,or和函數not()

例如,如果你想選擇由所有三層是XPath表達式選定的元素,你可以使用and操作:

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

我今天早上閱讀更多有關XPath和使他們正確地結合現在。我也意識到PMD中的AST比XML更具欺騙性。查看RAW xml並使用XPath跟蹤它比在PMD文檔中使用示例更明智。我很難知道何時使用/ Name和@Image,因爲我沒有意識到他們在XML中的位置。 – ttback

+0

@ttback:是的,我要指出的是,您需要比XPath更多的知道PMD的語義。 –

+0

是的,我已經非常接近能夠在節點集中找到一個節點。如果你想,你可以檢查我的最新問題。如果沒有相交和關於如何使用axis的知識,知道我是否正在使用我認爲正在使用的節點集合,這變得非常煩人。 – ttback