2009-07-17 16 views
11

Esto debería ser fácil, pero me está dando problemas. Dada esta estructura:Xpath para seleccionar solo los nodos donde existen elementos secundarios?

<root> 
    <a> 
    <b/> 
    </a> 
    <a/> 
</root> 

Estoy tratando de formular una expresión XPath que sólo da el no vacías "a" los elementos, es decir, los que tienen elementos secundarios. Por lo tanto, quiero que se devuelva la primera instancia de "a", pero no la segunda.

Hasta ahora tengo "/ root/a/self :: *" pero eso me está devolviendo las dos cosas.

+2

También encontré que este trabajos: /root/a [child :: *] ¡Pero le agradeceré a Adrian una respuesta que también funciona! :) –

Respuesta

12
/root/a[count(*)&gt;0] 

dará ningún 'a' nodo con cualquier tipo de nodo hijo

+5

Al igual que un punto extra, puede usar el recuento (b) para especificar los nodos secundarios que desea contar. –

6
/root/a[count(*)>0] 
+0

Creo que Adrian tiene razón sobre la necesidad de codificar. –

+3

Solo si desea colocarlo en un archivo XML (por ejemplo, un script XSLT). Aún así, eso es solo un detalle de almacenamiento, estoy bastante seguro de que la especificación XPath usa ">" :) –

3

Esta funciona

/root/a[*] 

o incluso

//a[*] 
+0

O si solo te importan los elementos secundarios con el nombre "b": '/ root/a [b]' – Timothy

Cuestiones relacionadas