C# 如何仅从html中提取文本
我需要提取html的C# 如何仅从html中提取文本,c#,html-agility-pack,C#,Html Agility Pack,我需要提取html的中存在的所有文本。Html输入示例:- <html> <title>title</title> <body> <h1> This is a big title.</h1> How are doing you? <h3> I am fine </h3> <img src="a
中存在的所有文本。Html输入示例:-
<html>
<title>title</title>
<body>
<h1> This is a big title.</h1>
How are doing you?
<h3> I am fine </h3>
<img src="abc.jpg"/>
</body>
</html>
为此,我只想使用HTMLagability。请不要用正则表达式
我知道如何加载HtmlDocument,然后使用像“//body”这样的xquery我们可以得到body内容。但如何剥离输出中显示的html
提前感谢:)使用XPath表达式
'//body//text()'
来选择所有文本节点如何?通常,对于解析html,我建议使用html解析器,但是,由于您要删除所有html标记,一个简单的正则表达式应该可以工作。您可以使用body的InnerText
:
string html = @"
<html>
<title>title</title>
<body>
<h1> This is a big title.</h1>
How are doing you?
<h3> I am fine </h3>
<img src=""abc.jpg""/>
</body>
</html>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string text = doc.DocumentNode.SelectSingleNode("//body").InnerText;
但是,请注意,在这种情况下,诸如hello
world
或helloworld
之类的标记将通过InnerText
转换为helloworld
——删除标记。这个问题很难解决,因为显示往往由CSS决定,而不仅仅是由标记决定。您可以使用支持从HTML提取文本的:
var result = Uglify.HtmlToText("<div> <p>This is <em> a text </em></p> </div>");
Console.WriteLine(result.Code); // prints: This is a text
var result=Uglify.htmlotext(这是一个文本”;
Console.WriteLine(result.Code);//打印:这是一个文本
由于它使用的是HTML5自定义解析器,因此它应该非常健壮(特别是在文档不包含任何错误的情况下),并且速度非常快(不涉及regexp,而是一个纯粹的递归下降解析器,比HtmlAgilityPack快,并且对GC更友好)请参阅一些HTML Agility Pack链接。我猜您必须在
HtmlNode
上调用类似InnerText
的属性。注意,xpath的htat”/html/body要快得多。它给出了错误。找不到HtmlDocument的命名空间。@Er.ShaileshS.Bankar-你有库吗?没有,我必须先添加它吗?正如公认的答案所建议的,它似乎在引擎盖下使用HtmlAlityPack
。@Xavierpinas没有,NUglify没有使用HtmlAlityPack
,它有自己的HTML5自定义解析器。对不起,你说得对。我在项目中看到了它,但它只是为了进行基准测试。
text = Regex.Replace(text, @"\s+", " ").Trim();
var result = Uglify.HtmlToText("<div> <p>This is <em> a text </em></p> </div>");
Console.WriteLine(result.Code); // prints: This is a text