首页 > 解决方案 > 使用 .net core 将 Html 转换为纯文本

问题描述

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

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

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

例如:

HTML 版本

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

应该导致

Hello World (#)

但这会导致

Hello World

标签: c#.netasp.net-core

解决方案


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

如果你想获取属性值,你应该自己做。您可以选择所有 a 标签的 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));
            
        }

结果:

在此处输入图像描述


推荐阅读