如何从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
world
helloworld将由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)