2013-03-04 49 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