【问题标题】:Suppress Tags from HTML with AgilityHTMLPack使用 AgilityHTMLPack 抑制 HTML 中的标签
【发布时间】:2020-08-04 07:40:18
【问题描述】:

我需要帮助,因为我真的不习惯使用 HTML。我从我的代码中显示了一个网络文档,该网络文档读取了一个 HTML 文件,其中包含一些图像。 每次,就在 Image 标签之前,我观察到两个标签创建了一些错误的字符。一个例子会更好。

<p ><br clear=all> </span>
<img border=0 width=265 height=105 id="Picture 84856"
   src="Test_HTML/image272.jpg"></p>

打印部分正确,因为它显示了图像和许多错误的字符。 所以我决定尝试剪掉标签。

我不知道该怎么做。也许我完全错了,但我认为这是一个好的开始,不是吗? 我在 Html 节点中抑制这些标签的测试是

        public void ShowTag(string tag)
    {
       
         string innerHtml= "//div[@id='"+tag+ "']";
        string inner = "//p";
        string brToRemove = "//br";
        string spanToRemove = "//span";
        

        
        var nodes = document.DocumentNode.SelectSingleNode(innerHtml);
        bool br_deleted = false;
        foreach (HtmlNode nd in nodes.SelectNodes(inner))
        {
          
            foreach (HtmlNode child in nd.ChildNodes)
            {
                if (child.Name == "br")
                {
                    int a = 0;
                    a++;
                 
                    
                    child.ParentNode.RemoveChild(child);
                    br_deleted = true;
                }
                if(child.Name=="span")
                {
                    int b = 0;
                    b++;
                    if (br_deleted == true)
                    {
                      
                        //nd.ParentNode.RemoveChild(child);
                        child.Remove();
                        br_deleted = false;
                    }
                    
                }
                        
            }
                        
        }

但我无法移除孩子,你知道吗?

【问题讨论】:

  • 您最好告诉创建类似 HTML 的垃圾的人编写正确的标记代码。事后修复损坏的代码毫无意义。
  • 你说得对,但如果由于某些原因我找不到其他解决方案,我必须想办法。
  • 好吧,如果 HTML 解析器必须解析的不是有效的 HTML,那么它们只能做这么多。您可能必须使用 RegEx 来实际创建有效的 HTML。
  • 最后是垃圾进,垃圾出。同样,只改变垃圾部分可能值得一试,因为无论你多么努力,你都无法从垃圾中神奇地创造黄金。
  • Effectevely ,你有权利这是不正常的,但它来自转换 WORD 到 HTML。主要问题来自于儿童进入循环并且我无法修改集合的事实。

标签: c# html-agility-pack


【解决方案1】:

我发现问题出在哪里:在选择好的节点时,我需要添加 Headers 以便我可以识别编码。

            string innerHtml = "//div[@id='" + tag + "']";
            string inner = "//p";                              
            webbrowser.Navigate("about:blank");
            LoadDocument();
            HtmlNode nodes = document.DocumentNode.SelectSingleNode(innerHtml);
            HtmlNode head = document.DocumentNode.SelectSingleNode("/html/head");

            head.AppendChild(nodes);

            webbrowser.NavigateToString(head.InnerHtml);

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多