【问题标题】:HTML Agility pack is changing </p> tag to <p> on invalid markupHTML 敏捷包在无效标记上将 </p> 标记更改为 <p>
【发布时间】:2017-11-29 16:25:52
【问题描述】:

输入:

<head><title>Title</title></head>
<font face="Verdana" size="2">
<p>

<b>Bold sentence.</b>
<br><br>Sentence after two  breaks.<br><br>Sentence after another two  breaks. <b><i>bold and italicized sentence.</i></b> sentence. <br><br>final sentence after two more breaks.

</font></p>

<form><center><div style='padding-left: 16px; padding-right: 16px;'><a class='button' href='javascript:void(0);' onclick='javascript:window.close()'><img src='/GBUIAssets/Web20/img/frame/buttonshade.png' alt='buttonShade' /><span class='roundLeft'><span class='roundRight'>Fermer</span></span></a></div></center></form></font>

我正在删除头部、字体和表格。我得到的输出是:

<p>

<b>Bold sentence.</b>
<br><br>Sentence after two  breaks.<br><br>Sentence after another two  breaks. <b><i>bold and italicized sentence.</i></b> sentence. <br><br>final sentence after two more breaks.

<p>

这是有问题的,因为我试图在之后将其转换为 xml,这会引发错误。为什么它“修复”我的代码中已经有效的一部分?有什么想法可能导致它吗?如果需要,我可以提供更多代码,但我只想首先确保没有明显的步骤我遗漏了。

编辑:为了完整的上下文,我剥离了 html 的正文内容。关键是,这个 HTML 是 HIDEOUS。格式真的很差。我将它加载到 xml 中以抛出 html 文档错误的特定错误,并将其吐出到每个未能剥离的文件的错误报告中

【问题讨论】:

  • 您的标记无效。您正在关闭字体标签之外的 p 标签。但是你在字体标签中声明了开始的 p 标签。
  • 是的,这个标记是由其他人编写的,并且存在错误。所以你认为是这个嵌套错误导致了 htmlagilitypack 中的问题? @MikeCorcoran
  • 是的,HAP 正在尝试“修复”html 汤。在这种情况下,它并没有完全按照您想要的方式进行修复。您可能需要使用某些启发式方法对文件进行预处理以解决它。
  • 在使用 HAP 处理之前,将“”替换为“”可能就足够了。
  • 为什么要将 HTML 加载到 XML 文档中? HTML 不是 XML 的子集。

标签: c# html html-agility-pack xmlconvert


【解决方案1】:

Marpup 无效。尝试将字体标签放在P标签旁边,你应该没问题。

【讨论】:

    【解决方案2】:

    将您的标记更新为:

    <head>
      <title>Title</title>
    </head>
    <font face="Verdana" size="2">
    <p>
    
    <b>Bold sentence.</b>
    <br/><br/>Sentence after two  breaks.<br/><br/>Sentence after another two  breaks. <b><i>bold and italicized sentence.</i></b> sentence. <br/><br/>final sentence after two more breaks.
    
    </p>
    
    <form>
    <center>
    <div style='padding-left: 16px; padding-right: 16px;'>
    <a class='button' href='javascript:void(0);' onclick='javascript:window.close()'>
    <img src='/GBUIAssets/Web20/img/frame/buttonshade.png' alt='buttonShade' />
    <span class='roundLeft'><span class='roundRight'>Fermer</span></span>
    </a>
    </div>
    </center>
    </form>
    </font>
    

    如果可能,我建议将 &lt;font&gt; 声明移到外部样式表中,例如

    body { font-face: Verdana; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      相关资源
      最近更新 更多