rubyでxmlを読み込む

用意する物

rubyでXMLファイルを読み込む場合、特別なGemは必要なく、デフォルトで用意されているrexml物だけで事足りるので便利です。
require "rexml/document"すれば利用可能です。

使い方

読み込み

doc = REXML::Document.new(File.new("openCampus.xml"))

子要素の取得

doc.elements

値の取得

doc.elements.first.text

属性の取得

doc.elements.first.attributes

要素を辿る

doc.elements["RESULTS/RETURN_CODE"]

サンプルコード

require "rexml/document"

# XMLファイル読み込み
doc = REXML::Document.new(File.new("test.xml"))

# インデント出力
def space x
  result = ''
  x.times { result += '  ' }
  result
end

# 再帰的に子要素を出力
def show_children parent, level
  parent.elements.each do |child|
    puts space(level) + child.name + (child.text ? ' => ' + child.text : '')
    show_children child, level + 1
  end
end

# 表示
show_children doc, 0

Hashに変換

Hashに変換するにはActiveSupportcore_extを使う方法があります。

require "rexml/document"
require 'active_support/core_ext'

# XMLファイル読み込み
doc = REXML::Document.new(File.new("test.xml"))

#Hashに変換
hash = Hash.from_xml(doc.to_s)