Html Agility Pack不会“保存”更改。需要重新加载内容

时间:2015-07-23 06:20:56

标签: c# html html-agility-pack

我正在将常规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 = "&nbsp;";

    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 ... >&nbsp;</div><p>content</p>

当我尝试选择之后的所有P元素

var pnodes = doc.DocumentNode.SelectNodes("//p");

这找到了0个结果......但是P仍然存在? 我发现的唯一修复是重新加载整个文档。但这不是做事的方式吗?

1 个答案:

答案 0 :(得分:0)

您应该使用Save方法

明确保存文档
doc.Save(filepath);