web-dev-qa-db-fra.com

Filtres multiples multiples XPath

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']/..
21
CroweMan

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 (=, !=, >, >=, &lt; et &lt;=).

donc, il est sûr d'écrire : A = B and C = D

Certaines erreurs les plus fréquentes faites :

  1. Les gens écrivent AND et/ou OR. N'oubliez pas que XPath est sensible à la casse .

  2. Les gens utilisent le | (Union) opérateur au lieu de or

enfin, voici ma solution :

 [.____]/Économie d'enregistrement/SavingAccompte [.____] [ServiceOnline = 'Oui' ou ServiceViaPHone = 'Oui'] [.____] 
56
Dimitre Novatchev

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.

4
falstro