XMLからHashオブジェクトのArrayを作る
レスポンスがXMLの場合、いちいちREXMLで調べているのもめんどくさいので一気にHashオブジェクトのArrayに変換するコードをカキカキ。前にもどこかで使ったな...と思ったらY!の形態素解析を使った時でした。最近はJSONとかで受け取りできるAPIも多くなってきたけど、時々必要になるし、標準のREXMLだけで解析できるのもイイ点なので公開しておきます。簡単なXMLのレスポンスなら後で使いやすくなりますよ。
require 'rexml/document' def xml2sym(doc) res = Array.new return res if doc.nil? doc.each_element{|item| hash = Hash.new item.each_element{|e| hash[e.name.to_sym] = e.text } res << hash } res end doc = REXML::Document.new( "<result><info><title>Title1</title><data>1234</data></info>" + "<info><title>Title2</title><data>5678</data></info></result>" ).elements['result'] data = xml2sym(doc)
dataには以下のようなHash配列のArrayが入ります
[{:title=>"Title1", :data=>"1234"}, {:title=>"Title2", :data=>"5678"}]
data.sizeとかdata.each{|d| p d[:title]}みたいに使います。レスポンスが1つだけに決まっているなら
data = xml2sym(doc)[0]
と書くと便利です。