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
159 160 161 162 163 |
# File 'lib/marc/xml_parsers.rb', line 159 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
171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/marc/xml_parsers.rb', line 171 def each unless block_given? return self.enum_for(:each) else 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 end |
#init ⇒ Object
Sets our parser
166 167 168 |
# File 'lib/marc/xml_parsers.rb', line 166 def init @parser = REXML::Parsers::PullParser.new(@handle) end |