使用HTMLAgilityPack僅提取頁面文本

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

好的,我對HTMLAgilityPack中使用的XPath查詢真的很陌生。

所以我們可以考慮這個頁面http://health.yahoo.net/articles/healthcare/what-your-favorite-flavor-says-about-you 。我想要的只是提取頁面內容而不是其他內容。

所以我首先刪除腳本和样式標籤。

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

之後,我嘗試使用// text()來獲取所有文本節點。

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

然而,不僅我不僅僅獲得文本我也獲得了無數/ r / n字符。

請在這方面我需要一些指導。

熱門答案

如果您認為scriptstyle節點只有子節點的文本節點,則可以使用此XPath表達式來獲取不在scriptstyle標記中的文本節點,這樣您就不需要事先刪除節點:

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

您可以使用XPath的normalize-space()進一步排除僅為空格的文本節點:

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

或者更短

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

但是您仍然會獲得可能具有前導或尾隨空格的文本節點。這可以在您的應用程序中處理,如@ aL3891所示。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因