REXML

RubyXML を扱えるライブラリって事で
REXML を触ってみる。


http://www.germane-software.com/software/rexml/index.html
↑ここの Downloads の Development (tgz) を解凍して
install.rb を実行すると使えるようになる。


子ノードの取得に children または elements を
使えばできると思いこんでたけど違ったよ・・・orz
なんか返ってくるノードが期待してる物と違うなぁと思ってて
(XMLにある改行とかも一緒に返ってきたりとか)
それを日記に書こうと思って再度APIを見ていたら
http://www.germane-software.com/software/rexml_doc/

REXML::Element#each_element
REXML::Element#get_elements

とか、ステキなメソッドがあるじゃん!
elements属性の説明は何が返ってくるんだかな内容だったから
余計に分からなかったよ。


で、お試しプログラム

require 'rexml/document'
xml =<<EOF

  
    るびーたろう
    1.8.5
    
      GC
      Mixin
    
  
  
    るびーじろう
    1.8.4
  

EOF

document = REXML::Document.new(xml)

puts "#######################################################"
puts "#         get person nodes by each_element            #"
puts "#######################################################"

document.root.each_element("person") {|ele|
  puts ele
}

puts "#######################################################"
puts "#         get person nodes by get_elements            #"
puts "#######################################################"

persons = document.root.get_elements("person")
for ele in persons
  puts ele
end

puts "#######################################################"
puts "#          get skill nodes by get_elements            #"
puts "#######################################################"

skills = persons[0].get_elements("items/skill")
for ele in skills
  puts ele.text
end