Extrahieren nur von Seitentext mit HTMLAgilityPack

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

Frage

Ok, ich bin also neu in XPath-Abfragen, die in HTMLAgilityPack verwendet werden.

Lassen Sie uns also diese Seite betrachten http://health.yahoo.net/articles/healthcare/what-your-favorite-flavor-says-about-you . Was ich will ist, nur den Seiteninhalt und nichts anderes zu extrahieren.

Deshalb entferne ich zuerst die Script- und Style-Tags.

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();
        }

Danach versuche ich // text () zu verwenden, um alle Textknoten zu bekommen.

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

Aber nicht nur bekomme ich nicht nur Text, ich bekomme auch zahlreiche / r / n Zeichen.

Bitte ich brauche ein wenig Anleitung in dieser Hinsicht.

Beliebte Antwort

Wenn Sie bedenken , dass script und style Knoten nur Textknoten für Kinder haben, können Sie diesen XPath - Ausdruck verwenden , um Textknoten zu erhalten , die nicht in sind script oder style - Tags, so dass Sie die Knoten nicht vorher entfernen müssen:

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

Sie können Textknoten, die nur Leerzeichen sind, mit XPath's normalize-space() :

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

oder je kürzer

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

Sie erhalten jedoch immer noch Textknoten, die führende oder nachfolgende Leerzeichen enthalten können. Dies kann in Ihrer Anwendung so gehandhabt werden, wie es @ aL3891 vorschlägt.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum