Module: MARC::REXMLReader

Defined in:
lib/marc/xml_parsers.rb

Overview

The REXMLReader is the ‘default’ parser, since we can at least be assured that REXML is probably there. It uses REXML’s PullParser to handle larger document sizes without consuming insane amounts of memory, but it’s still REXML (read: slow), so it’s a good idea to use an alternative parser if available. If you don’t know the best parser available, you can use the MagicReader or set:

MARC::XMLReader.parser=MARC::XMLReader::USE_BEST_AVAILABLE

or

MARC::XMLReader.parser=“magic”

or

reader = MARC::XMLReader.new(fh, :parser=>“magic”) (or the constant)

which will cascade down to REXML if nothing better is found.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(receiver) ⇒ Object



148
149
150
151
152
# File 'lib/marc/xml_parsers.rb', line 148

def self.extended(receiver)
  require 'rexml/document'
  require 'rexml/parsers/pullparser'
  receiver.init
end

Instance Method Details

#eachObject

Loop through the MARC records in the XML document



160
161
162
163
164
165
166
167
168
# File 'lib/marc/xml_parsers.rb', line 160

def each
  while @parser.has_next?
    event = @parser.pull
    # if it's the start of a record element 
    if event.start_element? and strip_ns(event[0]) == 'record'
      yield build_record
    end
  end    
end

#initObject

Sets our parser



155
156
157
# File 'lib/marc/xml_parsers.rb', line 155

def init
  @parser = REXML::Parsers::PullParser.new(@handle)
end