¿Cómo hace uno para recuperar el texto de un nodo sin seleccionar el texto en los niños?

<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.

InformationsquelleAutor Moak | 2010-12-19

3 Comentarios

  1. 41

    En el documento XML proporcionado por:

    <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 de la parte superior /div tiene 4 nodos hijos que son los nodos de texto. Los primeros tres de estos cuatro text-node los niños son whitespace-only. El último de estos 4 text-node los niños es el que se quería.

    Uso:

    /div/text()[last()]

    Esto es diferente de:

    /div/text()

    El último de mayo (dependiendo de si whitespace-only nodos son conservados por el analizador XML) seleccionar todos los 4 nodos de texto, pero sólo desea que el último de ellos.

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

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

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

    • la cuestión es seleccionar el texto sin hijo los nodos, la primera sugerencia por que no hacerlo.
    • Por qué? Yo no he sugerido que el uso de la descendant:: eje o el // abreviatura. La primera expresión, se selecciona sólo un nodo de texto: el último hijo de nodo de texto de /div. la alternativa selecciona cualquier niño nodo de texto de /div que no es espacio en blanco-solo.
    • simplemente porque nada dice que el quería texto será el último nodo?
    • No entiendo tu primer comentario ???
    • He editado mi respuesta para hacerla más clara. Espero que lo entiendo ahora.
    • la cuestión era conseguir el texto sin que el texto de los nodos secundarios. Llegar al último nodo de texto sólo está trabajando para la muestra dada, pero no respondiendo a la pregunta en general.
    • Creo que la edición respuesta cumple con sus objeciones — explica las dos alternativas que uno tiene: conocer bien exactamente del nodo que desea seleccionar o seleccionar todos los nodos de texto que no son de espacio en blanco solamente. Ambas expresiones evitar la selección de espacios en blanco-sólo los nodos de texto, algo que puede pasar con su propuesta de solución. Tenga en cuenta que el OP quiere realmente sólo la no-espacio en blanco-sólo los nodos de texto.
    • de hecho, el espacio en blanco stripping fue útil, gracias a ambos
    • Yo no entiendo por qué tanto de las soluciones no funcionan para mí en Firefox con XPather, pero //div/text()[normalize-space() and parent::div[@id='comment']] está bien.
    • Luego de evaluar las expresiones XPath contra otro documento XML (no contra el documento XML)
    • Creo que es un problema con XPather. Su XPath Visualizer y otro que funciona muy bien, gracias.
    • Esto no resuelve la respuesta para mí. Necesito el xpath resultado ser en la forma de un webelement, no una Cadena, y así el uso de /text() no es una opción.
    • text() selecciona todo el texto de nodos hijos del nodo actual-no cadenas como usted cree. Como para «webelements», no existe tal cosa en XPath.
    • Que funciona muy bien.
    • Sí, XPath es un muy elegante y potente lenguaje.

  2. 13

    Simplemente seleccione text() en lugar de .:

    div/text()

    Dadas en este fragmento de XML, este devuelve:

    Lorem ipsum dolor sit amet.

Dejar respuesta

Please enter your comment!
Please enter your name here