gpt4 book ai didi

c# - 从 HTML 中删除所有空的/不必要的节点

转载 作者:行者123 更新时间:2023-11-30 13:27:26 25 4
gpt4 key购买 nike

删除所有空节点和不必要节点的首选方法是什么?例如

<p></p>应该被删除并且<font><p><span><br></span></p></font>也应该删除(因此在这种情况下 br 标签被认为是不必要的)

我必须为此使用某种递归函数吗?我在想类似的事情:

 RemoveEmptyNodes(HtmlNode containerNode)
{
var nodes = containerNode.DescendantsAndSelf().ToList();

if (nodes != null)
{
foreach (HtmlNode node in nodes)
{
if (node.InnerText == null || node.InnerText == "")
{
RemoveEmptyNodes(node.ParentNode);
node.Remove();
}
}
}
}

但这显然行不通(stackoverflow 异常)。

最佳答案

不应删除的标签您可以将名称添加到列表中,并且由于 containerNode.Attributes.Count == 0 也不会删除具有属性的节点(例如图像)

static List<string> _notToRemove;

static void Main(string[] args)
{
_notToRemove = new List<string>();
_notToRemove.Add("br");

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<html><head></head><body><p>test</p><br><font><p><span></span></p></font></body></html>");
RemoveEmptyNodes(doc.DocumentNode);
}

static void RemoveEmptyNodes(HtmlNode containerNode)
{
if (containerNode.Attributes.Count == 0 && !_notToRemove.Contains(containerNode.Name) && string.IsNullOrEmpty(containerNode.InnerText))
{
containerNode.Remove();
}
else
{
for (int i = containerNode.ChildNodes.Count - 1; i >= 0; i-- )
{
RemoveEmptyNodes(containerNode.ChildNodes[i]);
}
}
}

关于c# - 从 HTML 中删除所有空的/不必要的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11579035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com