【问题标题】:How to fix html tags(which is missing the <open> & <close> tags) with HTMLAgilityPack如何使用 HTMLAgilityPack 修复 html 标签(缺少 <open> 和 <close> 标签)
【发布时间】:2013-08-23 06:56:10
【问题描述】:

我有一个带有&lt;div&gt;&lt;h1&gt; hello Hi&lt;/div&gt; &lt;div&gt;hi &lt;/p&gt;&lt;/div&gt;的html

所需输出:&lt;div&gt;&lt;h1&gt; hello &lt;/h1&gt;&lt;/div&gt; &lt;div&gt;&lt;p&gt;hi &lt;/p&gt;&lt;/div&gt;

使用 HTML 敏捷包是否可以解决此类缺少关闭和打开标签的类似问题?

【问题讨论】:

    标签: c# dom html-agility-pack


    【解决方案1】:

    库不够智能,无法在您放置它的位置创建开头p,但它足够智能,可以创建缺少的h1。通常,它总是创建有效的 HTML,但并不总是您所期望的。

    所以这段代码:

            HtmlDocument doc = new HtmlDocument();
            doc.Load(yourhtml);
            doc.Save(Console.Out);
    

    将转储这个:

    <div><h1> hello Hi</h1></div> <div>hi <p></div>
    

    这不是您想要的,而是有效的 HTML。 你也可以像这样添加一个小技巧:

            HtmlNode.ElementsFlags["p"] = HtmlElementFlag.Closed;
            HtmlDocument doc = new HtmlDocument();
            doc.Load(yourhtml);
            doc.Save(Console.Out);
    

    这将转储:

    <div><h1> hello Hi</h1></div> <div>hi <p></p></div>
    

    【讨论】:

    • 它只是不是

      节点。一般来说,我正在寻找一种修复方法来处理所有丢失的开始标签。有什么办法吗?

    • 该库会自动修复所有损坏的标签,但就像我说的那样,它可能不是您想要的方式。这么笼统的问题很难说更多。
    • OK 听起来不错,谢谢!你能告诉我如何将输出保存为字符串而不是 Console.Out...
    • doc.DocumentNode.OuterHtml 包含作为文本的完整文档。
    • 我加入这个对话可能有点晚了,但是有没有办法关闭自动修复损坏的标签?我不想要它(我正在代理,并且客户端在纠正时会中断),但我认为 HAP 不适用于糟糕的 html。
    【解决方案2】:

    做的时候 HtmlAgilityPack.HtmlDocument.LoadHTML(yourhtml) HTMLAgilityPack 会自动为您修复标签,然后您可以使用以下命令访问这些标签:HtmlAgilityPack.HtmlDocument.DocumentNode.OuterHTML

    【讨论】:

    • 这里是最简单的解决方案,谢谢。
    猜你喜欢
    • 2015-10-07
    • 2015-03-27
    • 2023-01-22
    • 1970-01-01
    • 2015-10-12
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多