给定一个适度复杂的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的工作是非常鼓舞人心的,我现在正朝着实现....很兴奋