68 votes

XPath - Différence entre node () et text ()

Je vais avoir de la difficulté à comprendre la différence entre le texte() et node(). Ce que je comprends, text() serait ce qui est entre les balises <item>apple</item> ce qui est d'apple dans ce cas. Nœud d'être quoi que ce nœud est en fait, ce qui serait l'élément

Mais ensuite, j'ai été affecté certains travaux où il me demande de "Sélectionner le texte de tous les articles en vertu de produire" et une autre question, demande: "Sélectionner tous les gestionnaire de noeuds dans tous les départements"

Comment est la sortie supposons en regarder de texte (), par opposition au nœud()

snip de XML

<produce>
 <item>apple</item>
 <item>banana</item>
 <item>pepper</item>
</produce>

<department>
 <phone>123-456-7891</phone>
 <manager>John</manager>
</department>

Bien sûr, il n'y a plus de services et plus gestionnaire, mais c'était juste une capture de code.

Toute aide serait grandement appréciée!

136voto

Tomalak Points 150423

text() et node() sont des tests de nœud, dans XPath terminologie (comparer).

Des tests de nœud fonctionner sur un ensemble (sur un axe, pour être exact) de nœuds et de retour de ceux qui sont d'un certain type. Il y a toutes sortes de tests de nœud:

  • node() correspond à aucun nœud (le moins spécifique, test de nœud de tous)
  • text() des matchs de texte noeuds
  • comment() correspond commentaire nœuds
  • * correspond à tout élément de nœud
  • foo correspond à n'importe quel nœud de l'élément qui a le nom de l' "foo"
  • processing-instruction() correspond PI nœuds (ils ressemblent <?name value?>).
  • (Note: Le * correspond à l'attribut de nœuds, mais seulement le long de la attribute de l'axe. @* est un raccourci pour attribute::*. Les attributs ne font pas partie de l' child axe, c'est pourquoi une normale * ne pas les sélectionner.)

Ce document XML:

<produce>
    <item>apple</item>
    <item>banana</item>
    <item>pepper</item>
</produce>

représente la suite de DOM (simplifié):

nœud racine
 nœud d'élément (name="produit")
 nœud de texte (valeur="\n ")
 nœud d'élément (name="item")
 nœud de texte (valeur="apple")
 nœud de texte (valeur="\n ")
 nœud d'élément (name="item")
 nœud de texte (valeur="banane")
 nœud de texte (valeur="\n ")
 nœud d'élément (name="item")
 nœud de texte (valeur="poivre")
 nœud de texte (valeur="\n")

Donc, avec XPath:

  • / sélectionne le nœud racine
  • /produce sélectionne un élément enfant du nœud racine si elle a le nom d' "produce"
  • /produce/node() sélectionne n'importe quel type de nœud enfant sous /produce/ (c'est à dire tous les 7 enfants)
  • /produce/text() sélectionne les 4 (!) blanc, seuls les nœuds de texte
  • /produce/item[1] sélectionne le premier élément enfant nommé "item"
  • /produce/item[1]/text() sélectionne tous les enfants des nœuds de texte (il n'y a qu'un "apple" - dans ce cas)

Et ainsi de suite.

Alors, à vos questions

  • "Sélectionnez le texte de tous les éléments dans la production de" /produce/item/text() (3 nœuds sélectionnés)
  • "Tout sélectionner le gestionnaire de noeuds dans tous les départements" //department/manager (1 nœud sélectionné)

Notes

  • La valeur par défaut de l'axe dans XPath est l' child de l'axe. Vous pouvez modifier l'axe en préfixant un autre axe de nom. Par exemple: //item/ancestor::produce
  • Les nœuds d'élément ont des valeurs de texte. Lorsque vous évaluez un nœud d'élément, son contenu textuel sera retourné. Dans le cas de cet exemple, /produce/item[1]/text() et string(/produce/item[1]) sera le même.
  • Voir aussi cette réponse où je décris les différentes parties d'une expression XPath graphiquement.

0voto

Speransky Danil Points 11150
Select the text of all items under produce - //produce/item/text()
Select all the manager nodes in all departments - //department/*

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X