在 Ruby 中从 XML DTD 生成对象模型
Posted
技术标签:
【中文标题】在 Ruby 中从 XML DTD 生成对象模型【英文标题】:Generating an object model in Ruby from an 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。
【参考方案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/
【讨论】:
以上是关于在 Ruby 中从 XML DTD 生成对象模型的主要内容,如果未能解决你的问题,请参考以下文章