module MARC::LibXMLReader

Public Class Methods

extended(receiver) click to toggle source
# File lib/marc/xml_parsers.rb, line 337
def self.extended(receiver)
  require "xml"
  receiver.init
end

Public Instance Methods

build_record() click to toggle source

each

# File lib/marc/xml_parsers.rb, line 361
def build_record
  r = MARC::Record.new
  until (@parser.local_name == "record") && (@parser.node_type == XML::Reader::TYPE_END_ELEMENT)
    @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 && !((@parser.local_name == "datafield") && (@parser.node_type == XML::Reader::TYPE_END_ELEMENT))
        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
  r
end
each() { |build_record| ... } click to toggle source
# File lib/marc/xml_parsers.rb, line 347
def each
  if block_given?
    while @parser.read
      if @parser.local_name == "record" && @parser.namespace_uri == @ns
        yield build_record
      end
    end # while
  else
    enum_for(:each)
  end
end
init() click to toggle source
# File lib/marc/xml_parsers.rb, line 342
def init
  @ns = "http://www.loc.gov/MARC21/slim"
  @parser = XML::Reader.io(@handle)
end