我正在努力规范化一些外部检索的HTML,这些HTML在富文本编辑器中的另一个站点上输入。该网站不是由我们管理的,我们无法纠正这方面的问题。可以想象,我们获得的HTML质量不一致。使用HtmlAgilityPack,我能够做得更好。我做的事情就是更换标签,删除空标签等等。
我遇到的其中一个质量问题是,有时我会收到这样的HTML,其中包含大量嵌套的span
s(实际代码段):
<h2><span><span><span><span><span><span><span><span><span>
<span><span><span><span><span><span><span><span><span><span>
<span><span><span><span><span><span><span><span><span><span>
<span><span><span><span><b><span><span><span><u><span>Working with us</span>
</u></span></span></span></b></span></span></span></span></span></span>
</span></span></span></span></span></span></span></span></span></span></span>
</span></span></span></span></span></span></span></span></span></span></span>
</span></span></span></span></span></h2>
我希望折叠所有跨度以产生以下结果:
<h2><span><b><span><u><span>Working with us</span></u></span></b></span></h2>
我可以使用一些额外的元素,但我想让span
崩溃。
我的代码似乎正常运行:
public static void CollapseElements(HtmlNode root, string tagName)
{
// This query finds all nodes which are children of the same type of node which
// are the only child of the parent node
var query = $"//{tagName}/{tagName}[count(preceding-sibling::*)+count(following-sibling::*)=0]";
var nodes = root.SelectNodes(query);
while (nodes != null && nodes.Count == 0)
{
foreach (var node in nodes)
{
var newNode = HtmlNode.CreateNode($"<{tagName}>{node.InnerHtml}</{tagName}>");
node.ParentNode.ParentNode.ReplaceChild(newNode, node.ParentNode);
}
nodes = root.SelectNodes(query);
}
}
有没有人看到这种方法存在任何缺陷,或者有其他建议?