如果没有父节点,如何删除节点

本文关键字:删除 节点 何删除 父节点 如果没有 | 更新日期: 2023-09-27 18:31:33

我正在使用HTML敏捷包来清理所见即所得的输入。这可能不是最好的方法,但我正在与那些在接触正则表达式时爆炸的开发人员合作,所以它必须足够了。

我的所见即所得内容如下所示(例如):

<p></p>
<p></p>
<p><span><input id="textbox" type="text" /></span></p>

我需要剥离空段落标签。这是我目前的做法:

HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//p");
if (nodes == null)
    return;
foreach (HtmlNode node in nodes)
{
    node.InnerHtml = node.InnerHtml.Trim();
    if (node.InnerHtml == string.Empty)
        node.ParentNode.RemoveChild(node);
}

但是,由于 HTML 不是完整的文档,因此段落标签没有父节点,因此RemoveChild将失败,因为ParentNode为 null。

不过,我找不到其他删除标签的方法,任何人都可以指出我另一种方法吗?

如果没有父节点,如何删除节点

从技术上讲,第一级元素是文档根目录的子元素,因此以下代码应该有效:

if (node.InnerHtml == String.Empty) {
    HtmlNode parent = node.ParentNode;
    if (parent == null) {
        parent = doc.DocumentNode;
    }
    parent.RemoveChild(node);
}

你想从集合中删除,对吧?

HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//p");
if (nodes == null)
    return;
for (int i = 0; i < nodes.Count - 1; i++)
{
    nodes[i].InnerHtml = nodes[i].InnerHtml.Trim();
    if (nodes[i].InnerHtml == string.Empty)
        nodes.Remove(i);
}