Domanda

Ho la seguente struttura XML di esempio:

<SavingAccounts>
    <SavingAccount>
       <ServiceOnline>yes</ServiceOnline>
       <ServiceViaPhone>no</ServiceViaPhone>
    </SavingAccount>
    <SavingAccount>
       <ServiceOnline>no</ServiceOnline>
       <ServiceViaPhone>yes</ServiceViaPhone>
    </SavingAccount>
</SavingAccounts>

Quello che devo fare è filtrare i nodi 'SavingAccount' usando XPATH dove il valore di 'ServiceOnline' è 'yes' o il valore di 'ServiceViaPhone' è yes.

L'XPATH dovrebbe restituirmi due righe !! Posso filtrare i nodi 'SavingAccount' in cui entrambi i valori degli elementi sono sì come il seguente esempio XPATH, ma quello che voglio fare è un confronto tra i valori degli elementi ???

/SavingAccounts/SavingAccount/ServiceOnline[text()='yes']/../ServiceViaPhone[text()='yes']/..
È stato utile?

Soluzione

Questa è una caratteristica XPath fondamentale: comporre una serie di condizioni con gli operatori logici e , o e la funzione not () .

e ha una priorità superiore a o ed entrambi gli operatori hanno una priorità inferiore rispetto a relazionale e uguaglianza operatori ( = , ! = , > , > = , & amp; lt; e & amp; lt; = ).

Quindi, è sicuro scrivere : A = B e C = D

Alcuni errori più frequenti commessi :

  1. Le persone scrivono AND e / o OR . Ricorda, XPath distingue tra maiuscole e minuscole .

  2. Le persone usano l'operatore | (unione) anziché o

Infine, ecco la mia soluzione :

/SavingAccounts/SavingAccount
           [ServiceOnLine='yes' or ServiceViaPhone='yes']

Altri suggerimenti

/SavingAccounts/SavingAccount[(ServiceOnLine='yes') or (ServiceViaPhone='yes')]

Will

/SavingAccounts/SavingAccount[ServiceOnline/text()='yes' or ServiceViaPhone/text()='yes']

fai il trucco?

Al momento non ho un valutatore XPath a portata di mano.

EDIT:
Se ricordo bene, non hai bisogno del testo (), quindi

[ServiceOnline='yes' or ServiceViaPhone='yes']

dovrebbe essere sufficiente e più leggibile.

EDIT:
Sì, certo, "o" per le espressioni predicate, mio ??male.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top