XPath, donde los requisitos se aplican a los nodos más profundas que las que en conjunto resultante

StackOverflow https://stackoverflow.com/questions/2011534

  •  18-09-2019
  •  | 
  •  

Pregunta

https://stackoverflow.com/questions/1948552/sharepoint-2007-how-to-check-if-a-folder-exists-in SharePoint 2007, la forma de comprobar si existe una carpeta en una biblioteca de documentos ) que tenía que analizar un documento XML con la estructura:

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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top