給定一個適度複雜的XML結構(數十個元素,數百個屬性),沒有XSD並且希望創建對象模型,那麼避免編寫樣板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...
我不介意明確創建對象結構;它說我只是確定序列化可以採取的一些高級編程保健...
我不是想救一兩行每類(通過移動from_xml行爲變成初始化或類方法等)。我正在尋找重複我的心理過程的「meta」解決方案:
「我知道每個元素都將成爲一個類名,我知道每個XML屬性都將是一個字段名稱,我知道要分配的代碼只是@#{attribute_name} = el。[#{attribute_name}],然後遞歸到子元素中,並在to_xml上反轉。
我同意建議「建設者」類加上XmlSimple似乎是正確的道路。 XML - >哈希 - >? - >對象模型(!和利潤)
更新2008-09-18 AM:從@Roman,@fatgeekuk和@ScottKoon很好的建議似乎已經打破了問題打開。我下載了HPricot源代碼,以瞭解它是如何解決問題的;關鍵方法顯然是instance_variable_set和class_eval。 IRB的工作是非常鼓舞人心的,我現在正朝着實現....很興奮