关于c#:使用.net核心将HTML转换为纯文本

Convert Html to plain text with .net core

本问题已经有最佳答案,请猛点这里访问。

如果将通过电子邮件发送HTML,则还必须附加替代纯文本。 (至少某些垃圾邮件检测软件会检查纯文本替代方法)如何将HTML转换为纯文本?

1
2
3
        HtmlDocument document = new HtmlDocument();
        document.Load(htmlBody);
        string plainBody = document.DocumentNode.InnerText;

将返回纯文本,但所有链接都将丢失。

例如:

HTML版本

1
Hello World

应导致

1
Hello World (#)

但是会导致

1
Hello World


据我所知,innertext将获取对象的开始和结束标签之间的文本,而不会获取属性值。

如果要获取属性值,则应自己完成。您可以选择所有标签的href属性值,然后替换内部文本。

更多详细信息,您可以参考以下代码:

我使用了HtmlAgilityPack软件包,您可以使用Nugetpackage进行安装:https://www.nuget.org/packages/HtmlAgilityPack/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
        var doc = new HtmlDocument();
        doc.LoadHtml(@"<html><body>textHello World test</body></html>");

        var innertext = doc.DocumentNode.InnerText;

        var nodes =  doc.DocumentNode.SelectNodes("//a");

        foreach (var item in nodes)
        {
            var herf = ((HtmlAttribute)item.Attributes.Where(x => x.Name =="href").FirstOrDefault()).Value;

            innertext = innertext.Replace(item.InnerText, item.InnerText + string.Format("({0})", herf));
           
        }

结果:

enter