c# - HTML Agility Pack RemoveChild - 未按预期运行

标签 c# html-agility-pack

假设我想从此 html 中删除 span 标签:

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

我希望这段代码能够完成我想要的

string html = "<html><span>we do like <b>bold</b> stuff</span></html>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

HtmlNode span = doc.DocumentNode.Descendants("span").First();
span.ParentNode.RemoveChild(span, true); //second parameter is 'keepGrandChildren'

但是输出看起来是这样的:

<html> stuff<b>bold</b>we do like </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);
        }
    }
}

关于c# - HTML Agility Pack RemoveChild - 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7911455/

相关文章:

c# - WCF 错误 "there was no endpoint listening at ..."

c# - 如何在 C# 的 HTML 源代码中按类或 id 抓取元素?

c# - 表格末尾的 HTML Agility Pack tr 插入

c# - 为什么使用 Dispatcher.CurrentDispatcher.BeginInvoke 不更新我的 GUI 而使用 BeginInvoke 却可以?

c# - 根据是否重复返回true或false

c# - 如果日期相差一天,则合并列表元素

c# - 使用 System.Data 而不是 System.Data.SqlClient

c# - 使用 HtmlAgilityPack 下载网页时违反 HTTP 协议(protocol)

c# - 在 HtmlAgilityPack loadhtml 中丢失 'less than' 标志

c# - HTML Agility Pack - 如何在 Head 元素的顶部附加元素?