2015-11-19 38 views
2

我有一個包含一個HTML文檔數據:解析HTML(不遵循HTML語義)使用引入nokogiri

<div> 
    <p class="someclass"> 
     <ul> 
      <li>Item 1</li> 
      <li>Item 2</li> 
     </ul> 
    </p> 
</div> 

在解析使用:

div_node.children.each do |child| 
    if child.node_name == 'p' 
    #store it as html string in db 
    store(child.to_html) 
    end 
end 

當我檢查數據庫,我只得到外<p>標籤:

<p class="someclass"> 
</p> 

沒有內<ul>標籤內容被存儲或保留rieved。

我知道<p>標籤不能包含<ul>標籤,但我們從客戶得到的文檔中有數據,有大約1000個文檔與數據,所以我不能編輯手動

+0

@Pete再次將p標籤轉換爲div我將不得不使用nokogiri那裏將不會有任何內容g節點,轉換後的div標籤也是如此。 想法? – ashishmohite

回答

1

我結束了使用Nokogiri::XML解析器解析HTML DOC

我曾在許多地方

解析代碼

@xml_doc = Nokogiri::XML.parse(file) { |cfg| cfg.noblanks } 
@xml_doc.remove_namespaces! 

變化完成

改變我的腳本
  • 變化attribute方法attr
  • text方法在這裏並不需要鏈接attr
  • 需要檢查一下,雖然
  • 一些更多的分析邏輯變化需要
  • node.to_html的作品就像一個魅力在這裏無效HTML5標籤所以我能夠存儲完整的HTML分貝
1

嘗試使用Nokogiri::XML解析器而不是Nokogiri::HTML之一。它不應該關心標籤語義,但我不確定它將如何處理那些不是有效的XML的HTML5部分。

+0

準確地說,我將不得不改變整個腳本的數千行:(如果我嘗試將其解析爲xml – ashishmohite

+2

無效的HTML被固定並標記在'errors'中。無效的HTML5標記在XML中不重要,除非它們是語法錯誤,在這種情況下,它們也會被修正並被標記.XML並沒有給像HTML這樣的標籤賦予特殊的含義,所以它應該只關心標籤嵌套和正確關閉。 –