Obtenir le texte d'un nœud en utilisant HtmlAgilityPack

c# html-agility-pack xpath

Question

J'ai le code HTML suivant:

<div class="top">
    <p>Blah.</p>
    I want <em>this</em> text.
</div>

Quelle est la notation XPath pour extraire la chaîne " I want <em>this</em> text. "? EDIT: Je ne veux pas nécessairement qu'une seule expression XPath extrait la chaîne. Sélectionner plusieurs nœuds et les parcourir pour produire la phrase serait également très utile.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(myHtml);
doc.DocumentNode.SelectSingleNode("??????");

Réponse acceptée

Que voulez-vous extraire, des nœuds ou une chaîne?

Si vous voulez des nœuds, "I want <em>this</em> text." est un fragment XML constitué au niveau supérieur de deux nœuds de texte et d'un élément <em> , qui a un enfant de nœud de texte. Comme il comporte plusieurs nœuds au niveau supérieur, vous devez utiliser SelectNodes("xpath expression a la @Alejandro") plutôt que SelectSingleNode() pour les extraire.

Si vous voulez une chaîne, vous devez encore utiliser SelectNodes (); puis parcourez les noeuds sélectionnés et concaténez le externalHTML de chacun. Voir ici pour un bon exemple de quelque chose de similaire.

En outre, votre exemple ne permet pas de savoir ce que l’expression XPath vous donnerait en général ce que vous voulez. Par exemple, voulez-vous tout après la <p>...</p> initiale sous <div class="top"> ? Ou voulez-vous tout le texte sous <div> sauf tous les éléments <p> ? Ou peut-être autre chose? Bien sûr, si les expressions XPath de @ Alejandro fonctionnent pour vous, elles sont déjà suffisamment spécifiées.


Réponse populaire

/div[@class='top']/p[.='Blah.']/following-sibling::node()

ou

/div[@class='top']/node()[not(self::p)]


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow