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!してファイルを書き直せばいいんじゃん、と気づいた。