给定一个中等复杂的XML结构(数十个元素,数百个属性),没有XSD,并且希望创建一个对象模型,那么避免编写样板from_xml()和to_xml()方法的优雅方法是什么?
例如,给定:
我如何避免编写无穷无尽的序列:
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行为移动到初始化器或类方法等).我正在寻找复制我心理过程的"元"解决方案:
"我知道每个元素都将成为一个类名.我知道每个XML属性都是一个字段名.我知道要分配的代码只是@#{attribute_name} = el.[#{attribute_name}然后递归到子元素.然后反转到to_xml."
我同意建议"构建器"类加上XmlSimple似乎是正确的路径.XML - >哈希 - >? - >对象模型(和利润!)
更新2008-09-18 AM:来自@ Roman,@ fatgeekuk和@ScottKoon的优秀建议似乎打破了问题.我下载了HPricot源码,看看它是如何解决问题的; 关键方法显然是instance_variable_set和class_eval.irb工作非常鼓舞人心,现在正朝着实施方向迈进......非常激动