如何从html中提取文本
我需要提取html的中存在的所有文本。 示例Html输入: –
title This is a big title.
How are doing you? I am fine
输出应该是: –
This is a big title. How are doing you? I am fine
我只想将HtmlAgility用于此目的。 请不要正则表达式。
我知道如何加载HtmlDocument,然后使用像’// body’这样的xquery,我们可以获取正文内容。 但是如何删除输出中显示的html?
提前致谢 :)
你可以使用body的InnerText
:
string html = @" title This is a big title.
How are doing you? I am fine
"; HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); string text = doc.DocumentNode.SelectSingleNode("//body").InnerText;
接下来,您可能想要折叠空格和新行:
text = Regex.Replace(text, @"\s+", " ").Trim();
但请注意,虽然它在这种情况下工作,但是标记如hello
或
worldhelloworld
将由InnerText
转换为helloworld
– 删除标记。 很难解决这个问题,因为显示是由CSS决定的,而不仅仅是标记。
如何使用XPath表达式'//body//text()'
来选择所有文本节点?
通常,对于解析html我会推荐一个HTML解析器,但是因为你想删除所有的html标签,一个简单的正则表达式应该可行。
您可以使用支持HTML文本提取的NUglify :
var result = Uglify.HtmlToText(" This is a text
"); Console.WriteLine(result.Code); // prints: This is a text
由于它使用HTML5自定义解析器,它应该非常健壮(特别是如果文档不包含任何错误)并且非常快(没有regexp但是纯粹的递归下降解析器,比HtmlAgilityPack更快且更友好的GC)