2013/08/29

ruby xml操作 REXML

ーファイルーー
<root>
    <a name="a1">
        <b>bbb1</b>
        <b>bbb2</b>
        <b>bbb3</b>
        <c>ccc1</c>
    </a>
    <a>
        <b>bbb4</b>
        <b>bbb5</b>
    </a>
    <a name="a3" price="100"></a>
</root>



puts doc.elements['root/a/b'].text
=>bbb1



puts doc.elements['root/a[2]/b[2]'].text
=>bbb5



doc.elements.each('root/a/b') do |element|
  puts element.text
end
=>bbb1~bbb5



doc.elements.each('root/a[1]/b[2]') do |element|
  puts element.previous_element.text
end
=>bbb1



doc.elements.each('root/a[1]/b[2]') do |element|
  puts element.next_element.text
end
=>bbb3



doc.elements.each('root/a[1]') do |element|
  puts element.name
end
=>a



doc.elements.each('root/a[2]') do |element|
  puts element.elements.size
end
=>2



doc.elements.each('root/a[3]') do |element|
  puts element.attributes["name"]
end
=>a3



hash = Hash.new
doc.elements.each('root/a[3]') do |element|
  hash = element.attributes
end
puts hash.size     #=>2
puts hash["name"]  #=>a3



doc.elements.each("root/a[@name='a1']/b") do |element|
  puts element.text
end
=>bbb1
bbb2
bbb3



puts doc.elements["root/a[@name='a3']"].attributes['price']
=>100



更新する
doc = Document.new File.new("guitars.xml")
elements["color"].text = "Red"
File.write("guitars.xml",doc)
rubyの古いバージョンで上記はエラーになった。
open(path, "w") {|f| f.write doc}