2012-05-30 19 views
5

¿Cuál es la expresión XPath para seleccionar elementos, nodos de texto y nodos de comentario, en el mismo orden en que aparecen en el documento?Expresión de XPath para seleccionar * todos * elementos, nodos de texto y nodos de comentario en orden de origen

La siguiente selecciona de manera efectiva todos los elementos, pero no los nodos de texto y nodos de comentario:

var result = document.evaluate('//*', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null), 
    index = -1; 
while (++index < result.snapshotLength) { 
    console.log(result.snapshotItem(index)); 
} 

¿Es posible hacer algo como lo siguiente? (Nota: esto no es funcional pseudo-código.)

document.evaluate('//* and text() and comment()'); 

Respuesta

5
//node() 

selecciona cada nodo que es un niño de algo: es decir, todos los elementos, nodos de texto, comentarios e instrucciones de procesamiento (pero no atributos, nodos de espacio de nombres o el nodo de documento)

+0

Woah! Corto y dulce. Esto funciona genial; también selecciona el elemento raíz, y para los documentos HTML incluso el DOCTYPE (que no sabía que era posible). –

+0

TIL que 'document.evaluate ('// node()', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null) .singleNodeValue === document.doctype'. –

+1

Si selecciona un nodo DOCTYPE, alguien ha interpretado imaginativamente la especificación XPath; no hay tal nodo en el modelo de datos XPath. –

1

probado con los nodos de texto y comentar en un documento XML. Puede haber un enfoque más eficiente, pero esto devuelve elementos, texto y nodos de comentario en el orden del documento para mí, el uso de la unión:

//*|//*/text()|//*/comment() 
+0

La pregunta es sobre HTML (no necesariamente XML) así que puede probarlo en la consola en esta página de Desbordamiento de pila, para ejemplo. Dicho eso, tu respuesta parece funcionar bien. Como XPath n00b, no sabía nada de '|' - ¡gracias! –

+1

Ah, en cuyo caso, bienvenido a '|' como 'union', y la advertencia inmediata de que en XPATH 1.0 solo se aplica desde la raíz de la consulta, no puede usarlo desde la mitad de una" ruta ". – MattH

+2

Ah, y una buena forma de iniciar su conocimiento de XPATH es verificar algunas de las respuestas de los usuarios principales para la etiqueta: http://stackoverflow.com/tags/xpath/topusers – MattH

Cuestiones relacionadas