Trouver le div parent d'un texte spécifique dans un HTMLDocument

.net html-agility-pack

Question

Je voudrais renvoyer l'intégralité de InnerText d'une div où se trouve un texte spécifique.

Par exemple: Je recherche "hello world" dans le document HTML (HTMLAgilityPack) et souhaite renvoyer l'intégralité du texte InnerText de la div où "hello world" a été trouvé.

C'est ce que j'ai essayé:

HtmlNode textNode = doc.DocumentNode.SelectNodes("//text()[contains(., 'hello world')]/..")

Cela a renvoyé le HtmlNode où le texte spécifique a été trouvé.

Maintenant, je veux que le premier div du parent de textNode renvoie l'intégralité de InnerText.

Merci d'avance

Réponse acceptée

Cela ferait je pense ...

var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(.//text(), 'Hello World')]");

Et c'est probablement une solution encore meilleure:

var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(.//text(), 'Hello World')]");

ou utilisez la notation Linq-to-XML:

var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(.//text(), 'Hello World')]");

Ou

var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(.//text(), 'Hello World')]");

Réponse populaire

Bien que je n’ai pas d’expérience avec HTMLAgilityPack, cela ressemble à la syntaxe XPath. Dans ce cas, le ".." devrait renvoyer le parent de l'élément trouvé.

J'ai utilisé ce site pour tester ceci: http://ponderer.org/download/xpath/

Si vous tapez

//li[contains(., 'about')]/../..

dans la zone de texte, il mettra en évidence la div contenant l'élément ul (qui contient l'élément li) en vert.

Est ce que c'est ce que vous recherchiez?




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi