HTML Agility Pack RemoveChild - 不按預期運行

c# html-agility-pack

假設我想從此html中刪除span標記:

<html><span>we do like <b>bold</b> stuff</span></html>

我期待這段代碼能夠完成我所追求的目標

<html><span>we do like <b>bold</b> stuff</span></html>

但輸出看起來像這樣:

<html><span>we do like <b>bold</b> stuff</span></html>

它似乎正在反轉跨度內的子節點。難道我做錯了什麼?

一般承認的答案

看起來像HtmlAgilityPack中的錯誤 - 請參閱他們的問題註冊:

http://htmlagilitypack.codeplex.com/workitem/9113

有趣的是,這是4年前提出的......

這是一個片段,它將刪除所有span標記(或您指定的任何其他標記)並使其他節點保持正確的順序。

void Main()
{
    string html = "<html><span>we do like <b>bold</b> stuff</span></html>";
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);
    RemoveTags(doc, "span");
    Console.WriteLine(doc.DocumentNode.OuterHtml);
}

public static void RemoveTags(HtmlDocument html, string tagName)
{
    var tags = html.DocumentNode.SelectNodes("//" + tagName);
    if (tags!=null)
    {
        foreach (var tag in tags)
        {
            if (!tag.HasChildNodes)
            {
                tag.ParentNode.RemoveChild(tag);
                continue;
            }

            for (var i = tag.ChildNodes.Count - 1; i >= 0; i--)
            {
                var child = tag.ChildNodes[i];
                tag.ParentNode.InsertAfter(child, tag);
            }
            tag.ParentNode.RemoveChild(tag);
        }
    }
}

熱門答案

foreach (HtmlNode child in tag.ChildNodes)
{
    tag.ParentNode.InsertBefore(child, tag);
}

tag.Remove();



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