適度に複雑な XML 構造 (数十の要素、数百の属性) があり、XSD がなく、オブジェクト モデルを作成したい場合、ボイラープレートの from_xml() および to_xml() メソッドを作成しないようにするためのエレガントな方法は何ですか?
たとえば、次のようになります。
<Foo bar="1"><Bat baz="blah"/></Foo>
次のエンドレス シーケンスを記述しないようにするにはどうすればよいですか。
class Foo
attr_reader :bar, :bat
def from_xml(el)
@bar = el.attributes['bar']
@bat = Bat.new()
@bat.from_xml(XPath.first(el, "./bat")
end
etc...
オブジェクト構造を明示的に作成しても構いません。高レベルのプログラミングで処理できると確信しているのはシリアライゼーションです...
クラスごとに1行または2行を節約しようとはしていません(from_xmlの動作を初期化子またはクラスメソッドなどに移動することにより)。私の精神的プロセスを複製する「メタ」ソリューションを探しています。
「すべての要素がクラス名になることはわかっています。すべての XML 属性はフィールド名になることもわかっています。割り当てるコードは @#{attribute_name} = el.[#{attribute_name} ] そして、サブ要素に再帰します。そして、to_xml を逆にします。"
「ビルダー」クラスと XmlSimple が正しい道のように思われるという提案に同意します。XML -> ハッシュ -> ? -> オブジェクト モデル (そして利益!)
更新 2008-09-18 AM: @Roman、@fatgeekuk、@ScottKoon からの優れた提案により、問題が解決したようです。HPricot のソースをダウンロードして、問題がどのように解決されたかを確認しました。重要なメソッドは明らかに instance_variable_set と class_eval です。irb の作業は非常に心強いものであり、現在実装に向けて動いています....非常に興奮しています