Selezionare solo il testo direttamente nel nodo, non in nodi figlio

Come si fa a recuperare il testo in un nodo senza selezionare il testo per i bambini?

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

In altre parole, voglio Lorem ipsum dolor sit amet. piuttosto che Editor's DescriptionLast updated: Lorem ipsum dolor sit amet.

InformationsquelleAutor Moak | 2010-12-19

 

3 Replies
  1. 42

    Nel documento XML:

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

    elemento top /div ha 4 figli nodi i nodi di testo. I primi tre di questi quattro text-node bambini sono whitespace-only. L’ultimo di questi 4 text-node bambini, è quella che è voluto.

    Utilizzare:

    /div/text()[last()]

    Questo è diverso da:

    /div/text()

    L’ultimo maggio (a seconda se whitespace-only nodi sono conservati dal parser XML) selezionare tutti e 4 i nodi di testo, ma si desidera solo l’ultimo di loro.

    Un’alternativa è (quando non si sa esattamente che text-node che si desidera):

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

    Seleziona tutti text-node-children di /div che non sono whitespace-only i nodi di testo.

    • la domanda è: per selezionare il testo, senza figlio nodi, il primo consiglio da voi non fa questo.
    • Perché? Non ho suggerito l’uso del descendant:: asse o il // abbreviazione. La prima espressione seleziona solo un nodo di testo: l’ultimo bambino nodo di testo di /div. l’alternativa seleziona qualsiasi bambino nodo di testo di /div che non è spazio solo.
    • semplicemente perché nulla dice che il testo desiderato sarà l’ultimo nodo?
    • Non capisco il tuo primo commento ???
    • Ho modificato la mia risposta per renderlo più chiaro. Spero che tu capisca ora.
    • la domanda era per ottenere il testo senza il testo dei nodi figlio. Ottenere l’ultimo nodo di testo solo per i campioni, ma non risponde alla domanda in generale.
    • Penso che la modifica in risposta soddisfa le vostre obiezioni — spiega le due alternative si ha: conoscere esattamente il nodo che si desidera selezionare, o selezionare tutti i nodi di testo che non sono bianco-solo spazio. Entrambe le espressioni evitare la selezione di spazi di solo i nodi di testo — qualcosa che potrebbe accadere utilizzando le ha suggerito la soluzione. Faccio notare che l’OP vuole davvero solo gli spazi vuoti non solo i nodi di testo.
    • infatti lo spazio bianco stripping è stato utile, grazie a entrambi
    • Io proprio non capisco perché entrambe le soluzioni non mi funziona in Firefox con XPather, ma //div/text()[normalize-space() and parent::div[@id='comment']] è bene.
    • Quindi la valutazione di espressioni XPath contro un diverso documento XML (non contro il previsto documento XML)
    • Penso che sia un problema con XPather. Il XPath Visualizer e un altro che funziona bene, grazie.
    • Questo non risolve la risposta per me. Ho bisogno di xpath risultato di essere nella forma di un webelement, non una Stringa, e quindi l’utilizzo di /text() non è un’opzione.
    • testo() seleziona tutto il testo nodi figli del nodo corrente — non stringhe come credi. Come per “webelements”, nessuna tale cosa esiste in XPath.
    • Che funziona molto bene.
    • Sì, XPath è un elegante e potente linguaggio.

  2. 13

    Basta selezionare text() invece di .:

    div/text()

    Su un dato frammento XML, questo restituisce:

    Lorem ipsum dolor sit amet.

Lascia un commento