require 'nokogiri' class DocumentHandler < Nokogiri::XML::SAX::Document attr_reader :opened, :closed def initialize @level = 0 @opened = 0 @closed = 0 end def start_element(name, attributes) @level += 1 @opened += 1 puts %Q{start_element -->>> #{"\t"*@level}name=[#{name}], attributes=[#{attributes.inspect}] -> level=[#{@level}]} end def end_element(name) @closed += 1 puts %Q{end_element -->>> #{"\t"*@level}name=[#{name}] -> level=[#{@level}]} @level -= 1 end end file=ARGV.shift sax_handler = DocumentHandler.new parser = Nokogiri::XML::SAX::Parser.new(sax_handler) parser.parse_file(file) puts "sax_handler.opened=[#{sax_handler.opened}]" puts "sax_handler.closed=[#{sax_handler.closed}]"