Фильтры нескольких элементов XPATH
у меня есть следующий пример структуры XML:
<SavingAccounts>
<SavingAccount>
<ServiceOnline>yes</ServiceOnline>
<ServiceViaPhone>no</ServiceViaPhone>
</SavingAccount>
<SavingAccount>
<ServiceOnline>no</ServiceOnline>
<ServiceViaPhone>yes</ServiceViaPhone>
</SavingAccount>
</SavingAccounts>
что мне нужно сделать, это отфильтровать узлы "SavingAccount" с помощью XPATH, где значение "ServiceOnline" - " да "или значение" ServiceViaPhone " - "да".
XPATH должен вернуть мне две строки!! Я могу фильтровать узлы "SavingAccount", где оба значения элемента да, как в следующем примере XPATH, но то, что я хочу сделать, это сравнение значений элемента или???
/SavingAccounts/SavingAccount/ServiceOnline[text()='yes']/../ServiceViaPhone[text()='yes']/..
3 ответов
это очень фундаментальная функция XPath: составление ряда условий с логическими операторами and
, or
и not()
.
and
имеет более высокий приоритет, чем or
и оба операторы имеют более низкий приоритет, чем реляционных и равенство операторы (=
, !=
, >
, >=
, <
и <=
).
Итак, безопасно писать: A = B and C = D
некоторые наиболее частые ошибки:
люди пишут
AND
и/илиOR
. помните, XPath чувствителен к регистру.люди используют
|
(union) оператор вместоor
наконец, вот мой решение:
/SavingAccounts/SavingAccount
[ServiceOnLine='yes' or ServiceViaPhone='yes']
будет
/SavingAccounts/SavingAccount[ServiceOnline/text()='yes' or ServiceViaPhone/text()='yes']
делать трюк?
на данный момент у меня нет оценщика XPath.
EDIT:
Если я правильно помню, вам не нужен текст (), поэтому
[ServiceOnline='yes' or ServiceViaPhone='yes']
должно быть достаточным и более читаемым.
EDIT:
Да, конечно, "или"для предикатных выражений, мой плохой.