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 ( =
!=
, >
, >=
, <
y <=
).
Entonces, es seguro escribir : A = B and C = D
Algunos de los errores más frecuentes cometidos :
La gente escribe
AND
y / oOR
. Recuerde, XPath distingue entre mayúsculas y minúsculas .La gente usa el
|
(unión) operador en lugar deor
Por último, esta es mi solución :
/SavingAccounts/SavingAccount [ServiceOnLine=''yes'' or ServiceViaPhone=''yes'']
/SavingAccounts/SavingAccount[(ServiceOnLine=''yes'') or (ServiceViaPhone=''yes'')]