2013-03-04 52 views
1

不确定如何标记此问题。我有一个由LaTeXMLpost转换的XHTML文档数据库;然而,说他们有验证问题是轻描淡写。我需要在浏览器中显示它们。然而,由于无效标记导致的标签自锁会扰乱我的结构。在布局中显示无效的HTML

的最小例如:

<!doctype html> 
<html> 
    <head> 
    <title>test</title> 
    </head> 
    <body> 
    <div id="content" style="background-color:pink"> 
     <!-- yield --> 

     <section > 
     <ul> 
      <li> 
      <div> 
       <p> 
       First 
       <li> 
        <div> 
        <p> 
         Second 
        </p> 
        </div> 
       </li> 
       </p> 
      </div> 
      </li> 
     </ul> 
     </section> 
     <section> 
     Next 
     </section> 

     <!-- end yield --> 
    </div><!-- end content --> 
    </body> 
</html> 

jsfiddle

一切外部的评论是布局;里面是加载的文件。如果事情是以面值出现的,一切都应该是粉红色的,对吧?

问题是,“Next”在#content之外被启动。尽管它是有效的XML,但它不符合HTML/XHTML DTD(或HTML5中DTD的任何传递),因此它会受到损坏。

现在的问题是:如何保护我的布局免受内部无效标记的影响?我可以对内容做些什么来规范化它?我在显示之前将它加载到Nokogiri中,但我仍然最终陷入了这个混乱之中(因为XML没有格式错误,我想Nokogiri对此没有做任何事情)。我不在乎它是否显示得很好,现在我所关心的是它仍然安全地被包含(否则我在操作它,附加事件,样式和几乎所有其他方面都有问题)。

回答

0

你可以尝试Nokogiri它有一些内置的功能来修复无效的标记。

相关问题:Repairing invalid HTML with Nokogiri (removing invalid tags)

+0

我*使用Nokogiri。然而,正如我上面所说的那样 - XML格式良好,没有未知或交叉标签......但浏览器的HTML假设应该放置一个结束标签,这一点已经被破坏。不幸的是,链接问题中没有任何内容与远程相关,因为它涉及无效标签。 :( – Amadan 2013-03-04 14:15:11

+0

如何使用像https://github.com/rgrove/sanitize仍然基于nokogiri的东西,但变压器看起来很有用。一种方法是编写这样的逻辑,检查当前节点父节点是否有效从验证器pov如果不删除它。 更糟糕的案例解决方案:只是用document.text或document.clean – dakull 2013-03-05 22:28:58