Comment obtenir la valeur de noeud / innerHTML avec XPath?

j'ai un XPath à sélectionner pour une classe que je veux: //div[@class='myclass']. Mais il me renvoie toute la div (avec le <div class='myclass'> aussi, mais je voudrais revenir seulement le contenu de cette balise sans la balise elle-même. Comment puis-je le faire?

31
demandé sur kjhughes 2012-06-05 17:16:41

4 réponses

avec xpath, la chose que vous obtiendrez est la dernière chose dans le chemin qui n'est pas une condition. Ce que cela signifie? Eh bien, les conditions sont ce qu'il y a entre []'s (mais vous le saviez déjà) et le vôtre se lit comme pathElement[qui a un attribut 'class' avec la valeur 'ma classe']. Le pathElement vient directement avant le [.

Tous les trucs à l'extérieur de []'s est le chemin, de sorte que dans //a/b/c[@blah='bleh']/d, b, c et d sont tous les éléments de chemin d'accès, bla est un attribut et bleh une valeur littérale. Si ce chemin correspond il vous renvoie l' d, la dernière chose non-condition.

Votre chemin particulier renvoie une (série de) div, étant la dernière chose sur le chemin de votre xpath. Cette valeur de retour inclut donc le(s) noeud (s) de niveau supérieur, div dans votre cas, et en dessous (eux), tous ses (leurs) enfants. Les noeuds peuvent être des éléments ou du texte (ou des commentaires, des instructions de traitement, ...).

sous un noeud il peut y avoir plusieurs noeuds de texte, d'où le tableau dont parle pOcHa. x/text() renvoie tout le texte qui est un enfant direct de x,x/node() renvoie tous les noeuds enfant, texte.

J'espère que cela vous aidera.

32
répondu jos 2015-10-08 15:38:17
node() = innerXml

text() = innerText

les deux sont des tableaux, afin que le texte()[1] est un des premiers enfants du nœud de texte...

41
répondu Nikola Bogdanović 2012-06-05 14:08:39

Nouvelle réponse à une vieille question fréquemment posée:

Pour ce XML

<div class="myclass">content</div>

vous pouvez utiliser XPath pour sélectionner content dans l'une des deux façons suivantes:

  1. Sélection Des Noeuds De Texte

    This XPath,

    //div[@class='myclass']/text()
    

    sélectionner le texte enfants du nœud ciblées div élément, content, comme demander.

  2. valeur de chaîne D'un élément

    This XPath,

    string(//div[@class='myclass'])
    

    retour la chaîne de valeur ciblées de la div élément, content, encore une fois, comme demandé.

    pour en savoir plus: voici un remarque: expliquant le la chaîne de valeurs d'éléments:

    la chaîne de valeur d'un noeud d'élément est le la concaténation de l' la chaîne de valeurs de tous les noeuds de texte descendants de l'élément nœud dans l'ordre du document.

3
répondu kjhughes 2017-10-06 19:42:44

Vous pouvez essayer

//div[@class='maclasse']/child::*

child::* sélectionne tous les éléments enfants du nœud contexte en savoir plus

1
répondu sajith 2014-11-14 11:49:12