extraire uniquement du texte de page à l'aide de HTMLAgilityPack

.net c# html-agility-pack xml-parsing xpath

Question

Ok, donc je suis vraiment nouveau dans les requêtes XPath utilisées dans HTMLAgilityPack.

Voyons donc cette page http://health.yahoo.net/articles/healthcare/what-your-favorite-flavor-says-about-you . Ce que je veux, c'est extraire uniquement le contenu de la page et rien d’autre.

Donc, pour cela, je supprime d'abord les balises de script et de style.

Document = new HtmlDocument();
        Document.LoadHtml(page);
        TempString = new StringBuilder();
        foreach (HtmlNode style in Document.DocumentNode.Descendants("style").ToArray())
        {
            style.Remove();
        }
        foreach (HtmlNode script in Document.DocumentNode.Descendants("script").ToArray())
        {
            script.Remove();
        }

Après cela, j'essaie d'utiliser // text () pour obtenir tous les nœuds de texte.

foreach (HtmlTextNode node in Document.DocumentNode.SelectNodes("//text()"))
        {
            TempString.AppendLine(node.InnerText);
        }

Cependant, non seulement je ne reçois pas que du texte, je reçois également de nombreux caractères / r / n.

S'il vous plaît j'ai besoin d'un peu de conseils à cet égard.

Réponse populaire

Si vous considérez que les nœuds de script et de style ne possèdent que des nœuds de texte pour les enfants, vous pouvez utiliser cette expression XPath pour obtenir des nœuds de texte qui ne figurent pas dans les balises de script ou de style .

//*[not(self::script or self::style)]/text()

Vous pouvez en outre exclure les nœuds de texte qui ne sont que des espaces à l'aide de la méthode normalize-space() XPath:

//*[not(self::script or self::style)]/text()[not(normalize-space(.)="")]

ou le plus court

//*[not(self::script or self::style)]/text()[normalize-space()]

Mais vous aurez toujours des nœuds de texte pouvant contenir des espaces de début ou de fin. Ceci peut être géré dans votre application comme le suggère @ aL3891.



Related

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