Режим 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 также имеет интерфейс Reader, который выдает каждый узел, если вам не нравится интерфейс обратного вызова в стиле SAX.
reader = Nokogiri::XML::Reader(xml)
reader.each do |node|
# node is an instance of Nokogiri::XML::Reader
puts node.name
end
Разница в том, что Nokogiri может восстанавливаться из-за неправильной формы лучше, чем любой другой анализатор, благодаря основному режиму восстановления libXML2 (по-моему, по умолчанию).