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
-
#each ⇒ Object
Loop through the MARC records in the XML document.
-
#init ⇒ Object
Sets our parser.
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
#each ⇒ Object
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 |
#init ⇒ Object
Sets our parser
209 210 211 |
# File 'lib/marc/xml_parsers.rb', line 209 def init @parser = REXML::Parsers::PullParser.new(@handle) end |