【问题标题】:Generating an object model in Ruby from an XML DTD在 Ruby 中从 XML DTD 生成对象模型
【发布时间】:2010-09-06 21:31:42
【问题描述】:

我有一个带有 DTD 的 XML 文档,并且希望能够访问 XML 模型,如下所示:

title = Thing.Items[0].Title

在 Ruby 中,有没有一种方法可以基于 DTD 生成这种对象模型?还是我被 REXML 卡住了?

谢谢!

【问题讨论】:

  • 我不明白为什么所有的答案都假设 Rails。问题中是否表明了这一点?
  • XmlSimple 是 Rails 的一部分,但它不依赖于 Rails。您可以使用 gem install xml-simple 将其安装到 Ruby 中,而无需安装所有 Rails。

标签: xml ruby dtd


【解决方案1】:

如果您包含 active_support gem(与 rails 一起提供),它会将方法 from_xml 添加到 Hash 对象。然后您可以调用 Hash.from_xml(xml_content),它会返回一个哈希值,您可以使用该哈希值访问数据。

我不知道将 xml 映射到对象的简单方法,但您可以创建一个包装类,将方法调用委托给保存数据的底层哈希。

【讨论】:

    【解决方案2】:

    我知道不久前有人问过这个问题,但如果你想要真正的 Thing.Items[0].Title 类型格式,你需要做的就是使用 OpenStruct。

    require 'rubygems'
    require 'activesupport' # For xml-simple
    require 'ostruct' 
    
    h = Hash.from_xml File.read('some.xml')
    o = OpenStruct.new h
    o.thing.items[0].title 
    

    【讨论】:

    • 哈,太搞笑了。我用谷歌搜索了这个问题,认为我喜欢这个答案,认为这是一个很好的解决方案,复制代码,运行测试,意识到这就是我想要的方式,回来关闭选项卡,然后意识到我是一年半前留下这个答案的人。
    【解决方案3】:

    您可以使用 xml-simple 的 ruby​​ 版本。

    您不需要安装 gem,因为我相信它已经安装了 rails。 http://xml-simple.rubyforge.org/

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 2010-09-17
      • 2017-12-02
      • 2023-03-14
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多