NET核心将HTML转换为纯文本

时间:2020-09-13 23:21:28

标签: c# .net asp.net-core

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

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

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

例如:

HTML版本

<a href="#">Hello World</a>

应该导致

Hello World (#)

但这会导致

Hello World

1 个答案:

答案 0 :(得分:2)

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

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

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

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

        var doc = new HtmlDocument();
        doc.LoadHtml(@"<html><body><div id='foo'>text<a href='#'>Hello World</a> <a href='#'>test</a></div></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 image description here