编程语言
首页 > 编程语言> > c# – 使用HTMLAgilityPack仅提取页面文本

c# – 使用HTMLAgilityPack仅提取页面文本

作者:互联网

好的,我对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()来获取所有文本节点.

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

然而,不仅我不仅仅是文本,我也得到了无数/ r / n字符.

请在这方面我需要一些指导.

解决方法:

如果您认为脚本和样式节点只有子节点的文本节点,则可以使用此XPath表达式来获取不在脚本或样式标记中的文本节点,这样您就不需要事先删除节点:

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

您可以使用XPath的normalize-space()进一步排除仅为空格的文本节点:

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

或者更短

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

但是您仍然会获得可能具有前导或尾随空格的文本节点.这可以在您的应用程序中处理,如@ aL3891所示.

标签:c,net,xml-parsing,xpath,html-agility-pack
来源: https://codeday.me/bug/20190713/1454511.html