REXML::Document#to_hash したい!
Rubyの標準ライブラリにあるxml、hashにするメソッドがないのよねー。
ということで作りました。
と入っても、殆ど http://rhysd.hatenablog.com/entry/20120504/1336155621 のコピペです。to_hashしたかっただけ。
# public domain require 'rexml/document' class ::REXML::Document def to_hash self.root.to_hash end end class ::REXML::Element def to_hash value = if self.has_elements? then children = {} self.each_element do |e| children.merge!(e.to_hash) do |k, v1, v2| v1.is_a?(Array) ? v1 << v2 : [v1, v2] end end children else self.text end {self.name.to_sym => value} end end
注意点として、xmlの属性は跡形もなく消え去ります。うん。
ActiveSupportをrequireすれば同様のメソッドが手に入るらしいですが、クラスを書き換えすぎるのはなんかなーってことで書きました。Rails書いたことないから入ってなかったし…(白目
#to_hash と #to_h 、どっちがよいのだろうか…。