Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅从html中提取文本_C#_Html Agility Pack - Fatal编程技术网

C# 如何仅从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输入示例:-

<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