require 'rubygems'
gem "libxml-ruby", "1.1.3"
require 'libxml'

class ScalableReader

  def initialize
    filename = File.join(File.dirname(__FILE__), "bookwise.xml")
    @reader = LibXML::XML::Reader.file(filename)
  end

  def each(&block)
    while !(obj = read_next).nil?
      yield obj
    end
  end

  private

  def read_next
    while @reader.read

      if @reader.node_type == LibXML::XML::Reader::TYPE_DOCUMENT_TYPE
        #puts @reader.expand.to_s
      elsif @reader.node_type == LibXML::XML::Reader::TYPE_ELEMENT
        if @reader.name == "Header"
          return @reader.read_outer_xml.dup
        elsif @reader.name == "Product"
          return @reader.read_outer_xml.dup
        end
      end
    end

  end

end

iter = ScalableReader.new

iter.each do |str|
  puts
  puts str
end
