REXMLで同名の要素を全部まとめて取り出す
例えば、
<!-- sample.xml --> <foo> <bar attr="1"/> <bar attr="2"/> <bar attr="3"/> </foo>
みたいなXMLがあって、名前がbarの要素を取り出すには当然の如く、
require 'rexml/document' doc = REXML::Document.new(File.open("sample.xml").read) elems = doc.root.elements["foo/bar"] # なんかの処理
とすれば、elemsにはbar要素が配列になって返ってくるものだと思ったのですが、これだと単に最初のbar要素が返ってくるだけでした。
まとめて配列で返して欲しいと思ってもどうやらまんまのメソッドはないようす。
なので、
require 'rexml/document' doc = REXML::Document.new(File.open("sample.xml").read) doc.root.elements.each("//bar") do |elem| # なんかの処理 end
として辛うじて目的達成。
# 勢いで書いたので上記コードは未動作確認