web-dev-qa-db-fra.com

Sélectionnez uniquement le texte directement dans le nœud, pas dans les nœuds enfants

Comment récupérer le texte dans un nœud sans sélectionner le texte dans les enfants?

<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 d'autres termes, je veux Lorem ipsum dolor sit amet. plutôt que Editor's DescriptionLast updated: Lorem ipsum dolor sit amet.

42
Moak

Dans le document XML fourni:

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

l'élément supérieur /div a 4 nœuds enfants qui sont des nœuds de texte. Les trois premiers de ces quatre text-node les enfants sont whitespace-only. Le dernier de ces 4 text-node les enfants est celui qui est recherché.

tiliser:

/div/text()[last()]

C'est différent de:

/div/text()

Ce dernier peut (selon que whitespace-only les nœuds sont conservés par l'analyseur XML) sélectionnez les 4 nœuds de texte, mais vous ne voulez que le dernier d'entre eux.

ne alternative est (quand vous ne savez pas exactement lequel text-node tu veux):

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

Cela sélectionne tous les text-node-children de /div qui ne sont pas whitespace-only nœuds de texte.

44
Dimitre Novatchev

Sélectionnez simplement text() au lieu de .:

div/text()

Sur le fragment XML donné, cela renvoie:

Lorem ipsum dolor sit amet.
13
Lucero

Que dis-tu de ça :
$doc/node()[3]/text()
En supposant que $ doc a le xml.

0
bosari