簡體   English   中英

使用 Nokogiri 解析 HTML(不遵循 HTML 語義)

[英]Parse HTML (without HTML semantics being followed) using Nokogiri

我有一個包含數據的 HTML 文檔:

<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>標簽內容。

我知道<p>標簽不能包含<ul>標簽,但是我們從客戶端得到的文檔有數據,並且有大約 1000 個帶有數據的文檔,所以我無法手動編輯它們

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

我最終使用Nokogiri::XML解析器來解析HTML文檔

我不得不在很多地方更改我的腳本

解析代碼

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

更改完成

  • attribute方法更改為attr
  • 這里不需要用text方法鏈接attr
  • 雖然需要檢查無效的 HTML5 標簽
  • 需要更多的解析邏輯更改
  • node.to_html在這里就像一個魅力,所以我能夠在 db 中存儲完整的 HTML

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM