gpt4 book ai didi

xml - 用于快速和肮脏的 XML 序列化的 Ruby 代码?

转载 作者:数据小太阳 更新时间:2023-10-29 01:48:26 25 4
gpt4 key购买 nike

给定一个没有 XSD 的中等复杂的 XML 结构(数十个元素,数百个属性)并希望创建对象模型,避免编写样板 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...

我不介意显式创建对象结构;这是我确信可以通过一些更高级别的编程来处理的序列化...


我并不想为每个类保存一两行(通过将 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 的工作非常令人鼓舞,我现在正在实现中....非常兴奋

最佳答案

您可以使用 Builder 而不是创建您的 to_xml 方法,并且您可以使用 XMLSimple 将您的 xml 文件拉入哈希而不是使用 from_xml 方法。不幸的是,我不确定您是否真的会从使用这些技术中获得那么多。

关于xml - 用于快速和肮脏的 XML 序列化的 Ruby 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/87021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com