XPath "Pas". Ignorer les branches avec une balise spécifique

html-agility-pack xpath

Question

J'ai chargé une page Web dans le pack d'agilité HTML et dispose d'un DOM. Je souhaite utiliser XPATH pour extraire tout le texte de la page (mais pas le javascript trouvé dans les balises <script> ).

Je suppose que j'ai besoin d'un // text () et ensuite d'un 'not' pour ignorer toutes les balises de la branche contenant un <script> .

j'ai essayé

doc.DocumentNode.SelectNodes("//text()[not(self::script)]"))

et

doc.DocumentNode.SelectNodes("//text()[not(self::script)]"))

mais ni travail. Un exemple de la propriété XPath d'un nœud renvoyé est (notez le script)

doc.DocumentNode.SelectNodes("//text()[not(self::script)]"))

J'ai consulté ces deux articles.

Est-il possible de faire une "non" correspondance dans XPath?

Prenez tout le texte de HTML avec Html Agility Pack (Ceci est un bon post, mais il fait ressortir le JS)

Aucune suggestion?

Réponse acceptée

Votre première tentative rejette tous les nœuds de texte qui sont des éléments de script et votre seconde rejette tous les nœuds de texte ayant des enfants de nœud de script. Bien sûr, dans les deux cas, la condition n'est jamais vraie.

Vous n'avez pas expliqué clairement vos exigences, mais je suppose que vous souhaitez rejeter tous les nœuds de texte ayant des éléments de script comme parent, ce qui serait

//text()[not(parent::script)]

ou

//text()[not(parent::script)]



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