2010-12-19 9 views
33

¿Cómo se puede recuperar el texto en un nodo sin seleccionar el texto en los elementos secundarios?Seleccione solo el texto directamente en el nodo, no en los nodos secundarios

<div id="comment"> 
    <div class="title">Editor's Description</div> 
    <div class="changed">Last updated: </div> 
    <br class="clear"> 
    Lorem ipsum dolor sit amet. 
</div> 

En otras palabras, quiero Lorem ipsum dolor sit amet. en lugar de Editor's DescriptionLast updated: Lorem ipsum dolor sit amet.

Respuesta

34

En el XML proporcionado cumento:

<div id="comment"> 
     <div class="title">Editor's Description</div> 
     <div class="changed">Last updated: </div> 
     <br class="clear"> 
     Lorem ipsum dolor sit amet. 
</div> 

el elemento superior /div tiene 4 hijos nodos que son los nodos de texto. Los primeros tres de estos cuatro hijos text-node son whitespace-only. El último de estos 4 text-node niños es el que se quiere.

Uso:

/div/text()[last()] 

Esto es diferente de:

/div/text() 

Este último puede (dependiendo de si whitespace-only nodos se conservan por el analizador sintáctico XML) Seleccionar todos los 4 nodos de texto , pero solo quieres el último de ellos.

Una alternativa es (cuando no se sabe exactamente qué text-node desea):

/div/text()[normalize-space()] 

Esto selecciona todos text-node-children de /div que no son whitespace-only nodos de texto.

+0

@Dimitre, la pregunta es seleccionar el texto sin * nodos * child *, la primera sugerencia hecha por usted no hace esto. – Lucero

+0

@Lucero: ¿Por qué? No he sugerido el uso del eje 'descend :: ::' o la abreviatura '//'. La primera expresión selecciona solo un nodo de texto: el último nodo de texto hijo de '/ div'. la alternativa selecciona cualquier nodo de texto hijo de '/ div' que no sea solo espacio en blanco. –

+2

@Dimitre, simplemente porque nada dice que el texto deseado será el último nodo? – Lucero

13

Simplemente seleccione text() en lugar de .:

div/text() 

En el fragmento XML en cuestión, esto devuelve:

Lorem ipsum dolor sit amet. 
+0

woa, eso era obvio xD gracias a bajillion =) – Moak

0

¿Qué tal esto:
$doc/node()[3]/text()
Suponiendo $ doc tiene el código XML.

Cuestiones relacionadas