如何檢查解析錯誤

Nokogiri 有點像瀏覽器,因為即使傳入的 HTML 或 XML 格式錯誤,它也會嘗試提供有用的東西。不幸的是,它通常會默默地執行,但我們可以使用 errors 查​​詢錯誤列表 :

require 'nokogiri'

doc = Nokogiri::XML('<node><foo/>')
doc.errors
# => [#<Nokogiri::XML::SyntaxError: 1:13: FATAL: Premature end of data in tag node line 1>]

而,正確的 XML 將導致沒有錯誤:

doc = Nokogiri::XML('<node><foo/></node>')
doc.errors
# => []

這也適用於解析 HTML,但是,因為 HTML 是一種輕鬆的 XML 形式,Nokogiri 會經常傳遞丟失的端節點,並且只報告格式錯誤的節點和更多的病態錯誤:

doc = Nokogiri::HTML('<html><body>')
doc.errors
# => []

doc = Nokogiri::HTML('<html><body><p')
doc.errors
# => [#<Nokogiri::XML::SyntaxError: 1:15: ERROR: Couldn't find end of Start Tag p>]

如果在解析後找不到可在編輯器中看到的節點,則可能是問題的原因。有時,通過格式化程式傳遞 HTML 有助於檢視巢狀是否有助於揭示問題。

並且,因為 Nokogiri 試圖解決問題,但有時無法正確解決問題,因為對軟體來說這可能是一件非常困難的事情,我們必須預先處理檔案並在交付之前修補線條到 Nokogiri。如何做到這一點取決於檔案和問題。它可以從簡單地找到一個節點和新增一個尾隨的 >,到刪除由一個糟糕的抓取例程注入的嵌入式格式錯誤的標記,所以這取決於程式設計師如何最好地進行調解。