我正在将常规HTML代码段转换为适当的电子邮件html。
这涉及将<p>
和<ul>
元素更改为div和表。
public static string getMailifiedHtml(string html)
{
//add spacing front and back to P and UL elements
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNode spacer = doc.CreateElement("div");
spacer.Attributes.Add("style", "font-size:10px;");
spacer.InnerHtml = " ";
doc.DocumentNode.AppendChild(spacer);
doc.LoadHtml(doc.DocumentNode.OuterHtml);
var pulolnodes = doc.DocumentNode.SelectNodes("//p|/ul|/ol");
if (pulolnodes != null) {
foreach (HtmlNode tb in pulolnodes) {
//tb.PrependChild(spacer);
tb.ParentNode.InsertBefore(spacer, tb);
}
}
doc.LoadHtml(doc.DocumentNode.OuterHtml);
var pnodes = doc.DocumentNode.SelectNodes("//p");
if (pnodes != null) {
foreach (HtmlNode tb in pnodes) {
string value = tb.InnerHtml;
HtmlNode lbl = doc.CreateElement("div");
lbl.InnerHtml = value;
tb.ParentNode.ReplaceChild(lbl, tb);
}
}
...
我做的第一件事就是在html后添加一个spacer。 然后我必须重新加载HTML。 然后我在所有P / UL / OL元素前面添加了间隔物 然后我重新加载它,然后将所有P元素更改为DIV的
有趣的是,我正在外面添加垫片。 所以<p>content</p>
变为
<div ... > </div><p>content</p>
当我尝试选择之后的所有P元素
var pnodes = doc.DocumentNode.SelectNodes("//p");
这找到了0个结果......但是P仍然存在? 我发现的唯一修复是重新加载整个文档。但这不是做事的方式吗?
答案 0 :(得分:0)
您应该使用Save方法
明确保存文档doc.Save(filepath);