XML を Parse したり書き出したりしたい
REXML を使って簡単にできました。
の前に。
no implicit conversion from nil to integer
とかいうエラーに悩まされたら
http://redmine.ruby-lang.org/repositories/diff/ruby-18/lib/rexml/formatters/pretty.rb?rev=19511
を見て、131行目付近を書き直してあげると幸せになれるかもしれません。
これでハマりました。
- RubyでXML操作 - Netsphere Laboratories
- http://www.nslabs.jp/ruby-rexml.rhtml
や
- REXMLについて
- http://www.cozmixng.org/~kou/ruby/rexml/
を読めば、だいたいわかるよ!
なので、やっぱりここはメモ程度に。。。
REXML を使う
標準でついてくるみたい。
よって
require 'rexml/document'
で使えるみたい。
XML を Perse する
まずは対象の XML を読み込むところから
require 'rexml/document' # source がすでに XML のフォーマットの場合 doc = REXML::Document.new( source ) # ファイルから読み込む場合 doc = REXML::Document.new( File.open('hoge.xml') )
仮に、この状態で以下の XML を Parse しようとした場合
<?xml version="1.0" encoding="UTF-8"?> <content item_type="test"> <title>hogefugapuga</title> <items> <item> <name>hoge1</name> </item> <item> <name>hoge2</name> </item> </items> </content>
以下のようにかけば Parse することができました。
doc.elements['content'].attributes['item_type'] # => test doc.elements['content/title'].text # => hogefugapuga doc.elements.each('content/items/item') do |item| item.elements['name'].text # => hoge1 # => hoge2 end
基本的には、elements を用いて要素にアクセスし、text (get_text) を用いて値を取得したり、attributes を用いて、属性値(っていうの?)を取得すればいいみたい!
最初ちょっと悩んだけど、使ってみるとかんたんだね!
XML を出力してみる
また後ほど。。。