如果節點沒有父節點,如何刪除它

.net asp.net c# html-agility-pack

我正在使用HTML敏捷包來清理WYSIWYG的輸入。這可能不是最好的方法,但我正在與正則表達式接觸爆炸的開發人員合作,所以它必須足夠。

我的WYSIWYG內容看起來像這樣(例如):

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

我需要刪除空的段落標記。這就是我現在正在做的事情:

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

但是,由於HTML不是完整的文檔,因此段落標記沒有父節點,因此,由於ParentNode為null,因此RemoveChild將失敗。

我找不到另一種刪除標籤的方法,有人能用另一種方​​法指出我嗎?

一般承認的答案

從技術上講,第一級元素是文檔根目錄的子元素,因此以下代碼應該起作用:

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);
}



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因