class Metacrunch::Mab2::Document::MabXmlParser

Public Instance Methods

attr(name, value) click to toggle source
# File lib/metacrunch/mab2/document/mab_xml_parser.rb, line 49
def attr(name, value)
  if @in_subfield
    @subfield.code = value if name == :code
  elsif @in_datafield
    if name == :tag
      @datafield.tag = value
    elsif name == :ind1
      @datafield.ind1 = value
    elsif name == :ind2
      @datafield.ind2 = value
    end
  elsif @in_controlfield
    @controlfield.tag = value if name == :tag
  end
end
end_element(name) click to toggle source
# File lib/metacrunch/mab2/document/mab_xml_parser.rb, line 36
def end_element(name)
  if @in_subfield
    @in_subfield = false
    @datafield.add_subfield(@subfield)
  elsif @in_datafield
    @in_datafield = false
    @document.add_datafield(@datafield)
  elsif @in_controlfield
    @in_controlfield = false
    @document.add_controlfield(@controlfield)
  end
end
parse(mab_xml) click to toggle source
# File lib/metacrunch/mab2/document/jruby/mab_xml_parser.rb, line 6
def parse(mab_xml)
  xml = Nokogiri::XML(mab_xml.try(:strip))
  xml.remove_namespaces!

  html_entities = HTMLEntities.new
  document = Document.new

  xml.xpath("//metadata/record").children.each do |node|
    if node.name == "controlfield"
      controlfield = Metacrunch::Mab2::Document::Controlfield.new
      controlfield.tag = node.attributes["tag"].value
      controlfield.values = node.content
      document.add_controlfield(controlfield)
    elsif node.name == "datafield" then
      datafield = Metacrunch::Mab2::Document::Datafield.new
      datafield.tag = node.attributes["tag"].value
      datafield.ind1 = node.attributes["ind1"].try(:value)
      datafield.ind2 = node.attributes["ind2"].try(:value)

      node.children.each do |subnode|
        if subnode.name == "subfield"
          subfield = Metacrunch::Mab2::Document::Subfield.new
          subfield.code = subnode.attributes["code"].value
          value = subnode.content
          subfield.value = value.include?("&") ? html_entities.decode(value) : value
          datafield.add_subfield(subfield)
        end
      end

      document.add_datafield(datafield)
    end
  end

  document
end
start_element(name) click to toggle source
# File lib/metacrunch/mab2/document/mab_xml_parser.rb, line 23
def start_element(name)
  if name == :subfield
    @in_subfield = true
    @subfield = Metacrunch::Mab2::Document::Subfield.new
  elsif name == :datafield
    @in_datafield = true
    @datafield = Metacrunch::Mab2::Document::Datafield.new
  elsif name == :controlfield
    @in_controlfield = true
    @controlfield = Metacrunch::Mab2::Document::Controlfield.new
  end
end
text(value) click to toggle source
# File lib/metacrunch/mab2/document/mab_xml_parser.rb, line 65
def text(value)
  if @in_subfield
    @subfield.value = value.include?("&") ? @html_entities_coder.decode(value) : value
  elsif @in_controlfield
    @controlfield.values = value
  end
end