XPath, donde los requisitos se aplican a los nodos más profundas que las que en conjunto resultante
Pregunta
D:multistatus
|--D:response
|----D:propstat
|-------D:prop
|----------D:displayname
|----------D:isFolder
¿Es posible construir una declaración XPath que selecciona un conjunto de tales elementos D:response
que contienen D:displayname
igual a "someName"
y D:isFolder
es "t"
?
Yo sé cómo hacerlo si selecciono todos los elementos D:response
y recorren el conjunto de resultados, pero creo XPath es lo suficientemente potente como para hacer eso de una manera más delicada.
Solución
//D:response[D:propstat/D:prop/D:displayname="someName" and D:propstat/D:prop/D:isFolder="t"]
Otros consejos
Si displayname
y isFolder
pueden aparecer en cualquier lugar dentro D:response
, entonces esto debería funcionar.
//D:response//[D:displayname="someName" and D:isFolder="t"]
// significa que el nodo puede aparecer en cualquier lugar en la jerarquía y
[...] es un predicado utilizado para filtrar los elementos que coinciden con los criterios dados.
Una variante más corta y más eficiente de la respuesta de @Jimmy Zhang es
/*/D:response[D:propstat/D:prop[D:displayname='someName' and D:isFolder='t']]
Se evita el operador //
ineficiente (que innecesariamente comprueba todo el árbol cuando la posición del elemento de destino se conoce realmente). También se utiliza un predicado anidado para evitar la redundancia.