operator online examples attribute and xpath multiple-conditions

online - xpath text contains



Filtros de elementos mĂșltiples XPATH (3)

Será

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

¿Haz el truco?

No tengo un evaluador XPath a la mano en este momento.

EDITAR:
Si recuerdo correctamente, no necesitas el texto (), entonces

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

debería ser suficiente y más legible

EDITAR:
Sí, por supuesto, ''o'' para expresiones de predicados, mi mal.

Tengo la siguiente estructura XML de muestra:

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

Lo que necesito hacer es filtrar los nodos ''SavingAccount'' usando XPATH donde el valor de ''ServiceOnline'' es ''yes'' o el valor de ''ServiceViaPhone'' es sí.

¡El XPATH debería devolverme dos filas! Puedo filtrar nodos ''SavingAccount'' donde los dos valores de los elementos son sí, como la siguiente muestra XPATH, pero lo que quiero hacer es una comparación de valores de elementos o ???

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


Esta es una característica fundamental de XPath: componer una serie de condiciones con los operadores lógicos and , or , y la función not() .

and tiene una prioridad mayor que oy ambos operadores tienen menor prioridad que los operadores relational y de equality ( = != , > , >= , &lt; y &lt;= ).

Entonces, es seguro escribir : A = B and C = D

Algunos de los errores más frecuentes cometidos :

  1. La gente escribe AND y / o OR . Recuerde, XPath distingue entre mayúsculas y minúsculas .

  2. La gente usa el | (unión) operador en lugar de or

Por último, esta es mi solución :

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


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