module MARC::LibXMLReader

Public Class Methods

extended(receiver) click to toggle source
# File lib/marc/xml_parsers.rb, line 298
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 316
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 308
def each
  while (@parser.read) do
   if @parser.local_name == 'record' && @parser.namespace_uri == @ns
     yield build_record
   end
  end # while
end
init() click to toggle source
# File lib/marc/xml_parsers.rb, line 303
def init
  @ns = "http://www.loc.gov/MARC21/slim"
  @parser = XML::Reader.io(@handle)
end