ROXML面白いなぁ…
「Ruby Object to XML Mapping Library」の名の通り、オブジェクトをゴニョる感じでXMLファイルを気軽に生成できるというもの。スキーマをクラスで定義する必要があるので、柔軟性という意味ではノーマルのrexml(roxmlはrexmlのラッパー)やlibxml-rubyには劣るけど、良く考えてみれば設計時にスキーマは定まっていて当然なので、となるとこれは恐らく話題のConvention over Configurationってやつだな、と。クラスとしてある程度型が定まっているので、スキーマの動的な部分は配列関係に落とし込める。配列として操作できるってことは、parentNodeだのnextSiblingだのと考えずに普通にイテレータで扱える。
インストールは「gem install roxml」で楽勝。あとは素人の説明より、チュートリアルを見た方がずっといいでしょう。でも、大したこと書いてないけど。
→Ruby Object to XML Mapping Library
gemでインストールしたのなら一応(チュートリアルはどれも見事に書いてないので)、
require 'rubygems' require_gem 'roxml'
を忘れずに。
因みにこれ、同じスキーマなら、File.open("ファイル名")を定義したクラスにパースしてアクセスすることもできます。書く方も楽だけど、むしろ読むときの方が楽チンで素晴らしい。
へえと思ったのは、仕様なのか「規約」なのか、はたまた俺の無知かは知らないけど、
<a> <b>111</b> <c /> <b>222</b> </a>
という構造はダメで、
<a> <bb> <b>111</b> <b>222</b> </bb> <c /> </a>
こんな感じでくくらないとダメっぽい。クラス定義の際も、bbタグ部分には「ROXML::TAG_ARRAY, "bb"」、という引数を加える必要があるし。でもこのおかげで、
a.bb.each do |b| p b end # -> "111" # -> "222"
なんてことができるので、その辺はトレードオフなのだろうか。
(追記)
ノードの削除のためのメソッドがないな…、と思ったら、フツーにreject!してファイルを書き直せばいいんじゃん、と気づいた。