0

REXML StreamListener を使用してウィキペディアの XML ダンプを解析しています。数百万の記事の後、一致する終了タグが見つからないと文句を言い、ファイルの残りをスキップします。

閉じられていないタグを無視し、その後ストリームの解析を再開する方法はありますか?

4

1 に答える 1

1

Nokogiri SAX モードは、REXML の SAX (StreamListener) モードに非常に似ています。サンプル:

require 'nokogiri'

include Nokogiri

class PostCallbacks < XML::SAX::Document
  def start_element(element, attributes)
    if element == 'tag'
      # Process tag data here
    end
  end
end

parser = XML::SAX::Parser.new(PostCallbacks.new)
parser.parse_file("data.xml")

Nokogiri には、SAX スタイルのコールバック インターフェイスが気に入らない場合に備えて、すべてのノードを生成する Reader インターフェイスもあります。

reader = Nokogiri::XML::Reader(xml)    
reader.each do |node|
  # node is an instance of Nokogiri::XML::Reader
  puts node.name
end

違いは、根底にある libXML2 回復モード (デフォルトではオンになっていると思います) のおかげで、Nokogiri はそこにあるほとんどのパーサーよりも非整形式性から回復できることです。

于 2011-07-06T12:56:30.323 に答える