c# - 使用 .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
解决方案
据我所知,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));
}
结果:
推荐阅读
- c# - 在 Blazor 的开始屏幕上设置 InputText 焦点
- pine-script - 如何用指标替换策略变量
- reactjs - 如何将 HTMLElement 转换为 React 元素?
- javascript - 将 css 半径更新为直线(附加 jsfiddle)
- c++ - Friend函数可以操作对象成员吗?
- javascript - 在 mongodb shell 中调用 java 脚本文件
- windows - 在 Windows 10 客户端上使用 FileMaker Pro 19 - 需要按名称搜索文件夹并返回其路径
- python - 如何在 Django Admin 的模型详细视图中显示图像?
- asp.net-core - 从 Blazor 组件 (.razor) 重定向到 Razor 页面 (.cshtml) [服务器端]
- webpack - 使用 webpack 和 babel 构建插件 - regeneratorRuntime 是从哪里来的?