module MARC::LibXMLReader
Public Class Methods
extended(receiver)
click to toggle source
# File lib/marc/xml_parsers.rb, line 318 def self.extended(receiver) require 'xml' receiver.init end
Public Instance Methods
build_record()
click to toggle source
# File lib/marc/xml_parsers.rb, line 340 def build_record r = MARC::Record.new() until (@parser.local_name == 'record' and @parser.node_type == XML::Reader::TYPE_END_ELEMENT) do @parser.read next if @parser.node_type == XML::Reader::TYPE_END_ELEMENT case @parser.local_name when 'leader' @parser.read r.leader = @parser.value when 'controlfield' tag = @parser['tag'] @parser.read r << MARC::ControlField.new(tag, @parser.value) when 'datafield' data = MARC::DataField.new(@parser['tag'], @parser['ind1'], @parser['ind2']) while (@parser.read and !(@parser.local_name == 'datafield' and @parser.node_type == XML::Reader::TYPE_END_ELEMENT)) do next if @parser.node_type == XML::Reader::TYPE_END_ELEMENT case @parser.local_name when 'subfield' code =@parser['code'] @parser.read data.append(MARC::Subfield.new(code, @parser.value)) end end r << data end # case end #until return r end
each() { |build_record| ... }
click to toggle source
# File lib/marc/xml_parsers.rb, line 328 def each unless block_given? return self.enum_for(:each) else while (@parser.read) do if @parser.local_name == 'record' && @parser.namespace_uri == @ns yield build_record end end # while end end
init()
click to toggle source
# File lib/marc/xml_parsers.rb, line 323 def init @ns = "http://www.loc.gov/MARC21/slim" @parser = XML::Reader.io(@handle) end