使用HTMLAgilityPack处理元素中元素的正确方法是什么?

时间:2014-12-14 18:40:09

标签: c# html html-agility-pack

说我已经获得了以下HTML

<p>Peter Piper picked a pack of <b>pickled</b> peppers</p>

我希望使用HTML Agility Pack处理它,将每个p转换为div,将每个b转换为strong

我知道如何处理所有p代码,

foreach(var p in doc.DocumentNode.SelectNodes("//p"))
{
    var p_text = p.innerText;
    // do something with p.innerText;
}

我甚至如何处理b代码

中的p代码
foreach(var p in doc.DocumentNode.SelectNodes("//p"))
{
    var p_text = p.innerText;
    // do something with p.innerText;

    foreach(var b in p.Descendants().Where(x => x.Name == "b"))
    {
        // do something with b;
    }
}

但那是我难倒的地方。 p的内部文本和我的b节点的集合是分开的。如何处理b代码,以便将其保存在我的&#39; p&#39;节点

我真的只是想从架构的角度来理解如何处理这个问题

PS:如果我的代码中存在错误,我会道歉,我只是作为一个例子从内存中做到这一点。

1 个答案:

答案 0 :(得分:1)

这应该有效:

foreach (var p in doc.DocumentNode.SelectNodes("//p"))
{
    p.ParentNode.ReplaceChild(
           HtmlAgilityPack.HtmlNode.CreateNode("<div>" + p.InnerHtml + "</div>"), 
           p);
}

foreach (var b in doc.DocumentNode.SelectNodes("//b"))
{
    b.ParentNode.ReplaceChild(
            HtmlAgilityPack.HtmlNode.CreateNode("<strong>" + b.InnerHtml + "</strong>"), 
    b);
}