J'ai l'exemple suivant Structure XML:
<SavingAccounts>
<SavingAccount>
<ServiceOnline>yes</ServiceOnline>
<ServiceViaPhone>no</ServiceViaPhone>
</SavingAccount>
<SavingAccount>
<ServiceOnline>no</ServiceOnline>
<ServiceViaPhone>yes</ServiceViaPhone>
</SavingAccount>
</SavingAccounts>
Ce que je dois faire, c'est filtrer les nœuds "sauvetage" à l'aide de XPath lorsque la valeur de 'ServiceOnline' est "Oui" ou la valeur de 'ServiceViaPhone' est oui.
Le XPath devrait me renvoyer deux rangées !! Je peux filtrer les nœuds "sauvegarde des cars" où les deux valeurs d'élément sont oui comme l'échantillon XPath suivant, mais ce que je veux faire est une comparaison de valeur d'élément ???
/SavingAccounts/SavingAccount/ServiceOnline[text()='yes']/../ServiceViaPhone[text()='yes']/..
Il s'agit d'une caractéristique XPath très fondamentale: composer un certain nombre de conditions avec les opérateurs logiques and
, or
et la fonction not()
.
and
a une priorité plus élevée que or
et les deux opérateurs ont une priorité inférieure à celle de la relationnelle et Equality Opérateurs (=
, !=
, >
, >=
, <
et <=
).
donc, il est sûr d'écrire : A = B and C = D
Certaines erreurs les plus fréquentes faites :
Les gens écrivent AND
et/ou OR
. N'oubliez pas que XPath est sensible à la casse .
Les gens utilisent le |
(Union) opérateur au lieu de or
enfin, voici ma solution :
[.____]/Économie d'enregistrement/SavingAccompte [.____] [ServiceOnline = 'Oui' ou ServiceViaPHone = 'Oui'] [.____]
Volonté
/SavingAccounts/SavingAccount[ServiceOnline/text()='yes' or ServiceViaPhone/text()='yes']
faire l'affaire?
Je n'ai aucun évaluateur XPath à portée de main pour le moment.
ÉDITER:
[.____] Si je me souviens bien, vous n'avez pas besoin du texte (), donc
[ServiceOnline='yes' or ServiceViaPhone='yes']
devrait être suffisant et plus lisible.
ÉDITER:
[.____] Oui, bien sûr, "ou" pour les expressions de prédicat, mon mauvais.