c# - HTML 敏捷包 - 在不删除内容的情况下删除不需要的标签?

标签 c# html-agility-pack

我在这里看到了一些相关的问题,但它们并没有完全谈论我面临的同一个问题。

我想使用 HTML Agility Pack从我的 HTML 中删除不需要的标签而不丢失标签中的内容。

例如,在我的场景中,我想保留标签“b”、“i”和“u”。

对于这样的输入:

<p>my paragraph <div>and my <b>div</b></div> are <i>italic</i> and <b>bold</b></p>

生成的 HTML 应该是:

my paragraph and my <b>div</b> are <i>italic</i> and <b>bold</b>

我尝试使用 HtmlNodeRemove方法,但它也删除了我的内容。有什么建议吗?

最佳答案

我根据 Oded 的建议编写了一个算法。这里是。就像一个魅力。

它删除除strongemu 和原始文本节点之外的所有标签。

internal static string RemoveUnwantedTags(string data)
{
    if(string.IsNullOrEmpty(data)) return string.Empty;

    var document = new HtmlDocument();
    document.LoadHtml(data);

    var acceptableTags = new String[] { "strong", "em", "u"};

    var nodes = new Queue<HtmlNode>(document.DocumentNode.SelectNodes("./*|./text()"));
    while(nodes.Count > 0)
    {
        var node = nodes.Dequeue();
        var parentNode = node.ParentNode;

        if(!acceptableTags.Contains(node.Name) && node.Name != "#text")
        {
            var childNodes = node.SelectNodes("./*|./text()");

            if (childNodes != null)
            {
                foreach (var child in childNodes)
                {
                    nodes.Enqueue(child);
                    parentNode.InsertBefore(child, node);
                }
            }

            parentNode.RemoveChild(node);

        }
    }

    return document.DocumentNode.InnerHtml;
}

关于c# - HTML 敏捷包 - 在不删除内容的情况下删除不需要的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12787449/

相关文章:

c# - 将 XPath 转换为 LINQ

c# - 如何双重解码 UTF-8 字节 C#

c# - 以编程方式提取 MS SQL 表列的数据类型以供以后插入

c# - C# 中的乘法错误

c# - 在对话框的构造函数中调用 .Show() 或 .ShowDialog 是一种好习惯

c# - Agility Pack - 为多个 HTTP 请求维护 'connection'

c# - SQL 查询 : Incorrect Syntax error

c# - 在 HtmlAgilityPack 中运行脚本

c# - HtmlAgilityPack 的可见区域有多深?

c# - 适用于 Windows Phone 8.1 的 HTML 敏捷包