web-dev-qa-db-fra.com

Comment obtenir la valeur du nœud / innerHTML avec XPath?

J'ai un XPath pour sélectionner une classe que je veux: //div[@class='myclass']. Mais ça me renvoie tout le div (avec le <div class='myclass'> également, mais je voudrais renvoyer uniquement le contenu de cette balise sans la balise elle-même. Comment puis-je le faire?

32
Tomasz Smykowski

Avec xpath, la chose que vous obtiendrez est la dernière chose du chemin qui n'est pas une condition. Qu'est-ce que cela signifie? Eh bien, les conditions sont celles entre [] (Mais vous le saviez déjà) et la vôtre se lit comme pathElement [qui a un attribut 'class' avec valeur 'ma classe'] . L'élément pathElement vient directement avant le [.

Tout ce qui est en dehors de [] Est alors le chemin, donc dans //a/b/c[@blah='bleh']/d a , b , c et d sont tous des éléments de chemin, blah est un attribut et bleh une valeur littérale. Si ce chemin correspond, il vous renverra un d , la dernière chose sans condition.

Votre chemin particulier renvoie un (série de) div , étant la dernière chose dans le chemin de votre xpath. Cette valeur de retour inclut donc le (s) nœud (s) de niveau supérieur, div dans votre cas, et sous lui (eux) tous ses (leurs) enfants. Les nœuds peuvent être des éléments ou du texte (ou des commentaires, des instructions de traitement, ...).

Sous un nœud, il peut y avoir plusieurs nœuds 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 nœuds enfants, y compris le texte .

J'espère que cela t'aides.

34
jos
node() = innerXml

text() = innerText

les deux sont des tableaux, donc text () [1] est un premier nœud de texte enfant ...

41

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

Pour ce XML

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

vous pouvez utiliser XPath pour sélectionner uniquement content de deux manières:

  1. Texte Node Sélection

    Ce XPath,

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

    sélectionnera les enfants du nœud de texte de l'élément div ciblé, content, comme demandé.

  2. Valeur de chaîne d'un élément

    Ce XPath,

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

    renverra valeur de chaîne de l'élément div ciblé, content, à nouveau comme demandé.

    Pour plus d'informations: Voici une note expliquant les string-values des éléments:

    valeur de chaîne d'un nœud d'élément est la concaténation des valeur de chaîne s de tous les nœuds de texte descendants du nœud d'élément dans l'ordre du document .

5
kjhughes

Tu peux essayer

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

child :: * sélectionne tous les éléments enfants du nœud de contexte voir les détails

2
sajith