XSDを持たず、オブジェクトモデルを作成したいという適度に複雑なXML構造(数十の要素、何百もの属性)がある場合、定型文from_xml()とto_xml()メソッドを書くことを避けるエレガントな方法は何ですか?例えば素早く汚れたXMLシリアル化のためのRubyコード?
、与えられた:
<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...
を私は明示的にオブジェクト構造を作成する気にしません。それは私がちょうど確信している直列化は
私はラインやクラスごとに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です。
@bar = el.bar:IRBの仕事は、今、あなたはそれはあなたがすることができます不足しているメソッドを定義することができます....実現に向けて非常に興奮し