Module: MARC::LibXMLReader

Defined in:
lib/marc/xml_parsers.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(receiver) ⇒ Object



337
338
339
340
# File 'lib/marc/xml_parsers.rb', line 337

def self.extended(receiver)
  require "xml"
  receiver.init
end

Instance Method Details

#build_recordObject

each



361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
# 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

#eachObject



347
348
349
350
351
352
353
354
355
356
357
# 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

#initObject



342
343
344
345
# File 'lib/marc/xml_parsers.rb', line 342

def init
  @ns = "http://www.loc.gov/MARC21/slim"
  @parser = XML::Reader.io(@handle)
end