用c#从html文档中删除一些标签

时间:2010-03-15 12:17:57

标签: c# html

我有一个html文档,我想删除某些类的所有div(包含所有内容)。最简单的方法是什么?

感谢您的帮助。

更新:

我按照你的建议试用了Html Agility Pack,但是我未达到目标。 我有以下代码

        static void Main()
        {
            HtmlDocument document = new HtmlDocument();
            document.Load(FileName);
            HtmlNode node = document.DocumentNode;
            HandleNode(node);
        }

    private static void HandleNode(HtmlNode node)
    {
        while (node != null)
        {
            if (node.Name == "div")
            {
                var attribute = node.Attributes.Where(x => x.Name == "class" && x.Value == "NavContent");
                if (attribute.Any())
                    node.Remove();
            }
            foreach (var childNode in node.ChildNodes)
            {
                HandleNode(childNode);
            }
        }

    }

但它并不想要我想要的。递归永远不会结束,节点名称始终是注释。 这是我正在尝试解析的htmp文档:http://en.wiktionary.org/wiki/work 有一个很好的例子如何使用Html Agility Pack? 这段代码出了什么问题?

4 个答案:

答案 0 :(得分:9)

这取决于how complex your HTML is,但您可能需要Agility Pack库。

重新更新:

HandleNode()包含while(node != null)循环,但从不分配给节点。我会将其更改为if(...)以开始。

答案 1 :(得分:2)

您正在寻找HTML Agility Pack

答案 2 :(得分:2)

要解决您的问题,您可以使用LINQ:

foreach(var node in doc.DocumentNode
            .Descendants("div")
            .Where(d => d.GetAttributeValue("class", "").IndexOf("NavContent") >= 0)
            .ToArray())
    node.Remove();

答案 3 :(得分:0)

通常,我通过文件I / O和RegEx解决了这类问题(根据评论员尽职尽责地指出,完全不建议处理xml / html文档)。

那就是说,如果你想正确地做,我很确定C#中有一个DOM对象。

This one似乎支持XPath请求,这非常方便。