在 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 生成对象模型的主要内容,如果未能解决你的问题,请参考以下文章

来自JaxB类的DTD验证

如何在 ActiveRecords 中创建对 Ruby 中对象的引用?

Ruby on Rails 生成模型

在 Eclipse 中从 XML 生成 Java 代码

xml约束技术---schema

如何在 C# 中从数据表生成 XML