说我已经获得了以下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:如果我的代码中存在错误,我会道歉,我只是作为一个例子从内存中做到这一点。
答案 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);
}