Как иметь вложенные условия для правил PMD Xpath - PullRequest
1 голос
/ 25 января 2012

Мое правило требует, чтобы я применял их только к методам без 'get' как части их имени.Другими словами, мои правила должны применяться только к не-получающим методам в классе.Я знаю, чтобы овладеть всеми не получающими методами, я могу использовать

//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 Ответ

1 голос
/ 25 января 2012

Вы должны иметь хотя бы некоторые базовые знания / понимание 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'
   ] 
...