有没有办法从XSD生成
Ruby类(甚至可能是ActiveResource类),以便它们包含一种将类序列化为xml的初始XSD有效的方法?
我知道soap4r有xsd2ruby,但是看起来生成的ruby类不能轻易地序列化为xml.
解决方法
标记,
虽然这是前一段时间提到的,但我遇到了一个解决方案,并认为这可能有助于未来的人们.
我的需要是相似的.我有一个来自同事的.xsd,并希望从它生成一个类文件.我的希望是,我可以轻松地编组对象并将其传递给他的RESTful终点,在那里他的Java服务器将解压缩有效负载,并动态构建对象在他身边,无需额外的努力.
我找到的解决方案是从https://github.com/rubyjedi/soap4r获取soap4r.我将bin目录中的两个* .rb文件执行,然后运行:
bin/xsd2ruby.rb --xsd <source>.xsd --classdef <filename_prefix>
这产生了一个新的文件,每个xsd:complexType被实现为一个类.所有其他复杂类型也是使用正确的继承关系生成的,并且所有xsd:element都被定义为实例变量,并且还定义了类初始化器.
运行xsd2ruby.rb本身就产生了以下选项:
~/src/test/soap4r:bin/xsd2ruby.rb Usage: bin/xsd2ruby.rb --xsd xsd_location [options] xsd_location: filename or URL Example: bin/xsd2ruby.rb --xsd myapp.xsd --classdef foo Options: --xsd xsd_location --classdef [filenameprefix] --mapping_registry --mapper --module_path [Module::Path::Name] --force --quiet
为了完整起见,我将以下课程扩展到我的课程(这是一个“Prospect”课程):
class Prospect include Enumerable def each(&block) self.instance_variables.collect{|v| (v.gsub /@/,'').to_sym }.each(&block) end end
这让我将它用作Net :: HTTP :: Post请求的正文.
对于一个免费的to_xml的问题:我没有找到它. ruby对象带有一个to_yaml和to_json开箱即用,但我没有发现任何简单的XML转换.所以它下来卷了我自己的“to_xml”.
希望这可以帮助.