【问题标题】:delete some tags from html document with c#用c#从html文档中删除一些标签
【发布时间】:2010-03-15 22:32:31
【问题描述】:

我有一个 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? 这段代码有什么问题?

【问题讨论】:

  • 您要删除 div 及其内容吗?
  • 您的更新应该是一个单独的问题。让事情井井有条。
  • 我设法让它按我的意愿工作。

标签: c# html


【解决方案1】:

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

重新更新:

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

【讨论】:

    【解决方案2】:

    您正在寻找HTML Agility Pack

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        通常,我通过 File I/O 和 RegEx 解决此类问题(正如评论员尽职尽责地指出的那样,根本不建议处理 xml/html 文档)。

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

        This one好像支持XPath请求,挺方便的。

        【讨论】:

        • 该 div 可能有嵌入的 div。那么你将如何理解 div 的结束位置呢?
        • 确实,这就是为什么我谈到了做这些事情的正确方法(比如敏捷包)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-05
        • 2011-11-12
        • 1970-01-01
        • 2016-11-23
        • 2013-11-21
        • 1970-01-01
        相关资源
        最近更新 更多