XPATH elementos múltiplos filtros
-
19-08-2019 - |
Pergunta
Eu tenho a seguinte estrutura XML de exemplo:
<SavingAccounts>
<SavingAccount>
<ServiceOnline>yes</ServiceOnline>
<ServiceViaPhone>no</ServiceViaPhone>
</SavingAccount>
<SavingAccount>
<ServiceOnline>no</ServiceOnline>
<ServiceViaPhone>yes</ServiceViaPhone>
</SavingAccount>
</SavingAccounts>
O que eu preciso fazer é filtrar nós o 'SavingAccount' usando o XPath, onde o valor de 'ServiceOnline' é 'sim' ou o valor de 'ServiceViaPhone' é sim.
O XPath deve voltar-me duas linhas !! Eu posso filtrar nós 'SavingAccount' onde ambos os valores dos elementos são sim como o exemplo a seguir XPATH, mas o que eu quero fazer é um ou comparação valor do elemento ???
/SavingAccounts/SavingAccount/ServiceOnline[text()='yes']/../ServiceViaPhone[text()='yes']/..
Solução
Esta é uma característica XPath muito fundamental: compor uma série de condições com os operadores lógicos and
, or
, ea função not()
.
and
tem uma prioridade maior do que or
e os operadores têm prioridade menor do que o relacional e igualdade operadores (=
, !=
, >
, >=
, <
e <=
).
Assim, é seguro para escrever : A = B and C = D
Alguns erros mais frequentes feitas :
-
gravar
AND
e / ouOR
Pessoas. Lembre-se, XPath é sensível a maiúsculas . -
As pessoas usam a
|
(união) operador em vez deor
Por último, aqui está a minha solução :
/SavingAccounts/SavingAccount [ServiceOnLine='yes' or ServiceViaPhone='yes']
Outras dicas
/SavingAccounts/SavingAccount[(ServiceOnLine='yes') or (ServiceViaPhone='yes')]
Will
/SavingAccounts/SavingAccount[ServiceOnline/text()='yes' or ServiceViaPhone/text()='yes']
fazer o truque?
Eu não tenho XPath avaliador calhar no momento.
EDIT:
Se bem me lembro, você não precisa o texto (), então
[ServiceOnline='yes' or ServiceViaPhone='yes']
deve ser suficiente, e mais legível.
EDIT:
Sim, claro, 'ou' para expressões de predicado, meu mau.