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



202
203
204
205
206
# File 'lib/marc/xml_parsers.rb', line 202

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



214
215
216
217
218
219
220
221
222
223
224
225
226
# File 'lib/marc/xml_parsers.rb', line 214

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

#initObject

Sets our parser



209
210
211
# File 'lib/marc/xml_parsers.rb', line 209

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