簡體   English   中英

從XSD生成Ruby類

[英]Generate Ruby Classes from XSD

有沒有辦法從XSD生成Ruby類(甚至可能是ActiveResource類),以便它們包含一種將類序列化為xml對初始XSD有效的方法?

我知道soap4r有xsd2ruby,但似乎生成的ruby類不能輕易地序列化為xml。

無恥的自我推銷(希望這在stackoverflow上沒問題),但我正在開發一個開源項目來做到這一點

它仍然是一個正在進行的工作(隨意發送補丁),但最終目標是將XSD轉換為Ruby類(現在它),並將符合XSD的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運行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_yamlto_json ,但我沒有找到任何簡單的XML轉換。 所以它歸結為我自己的“to_xml”。

希望這可以幫助。

看起來這可能有效。

require'xdd / mapping'XSD :: Mapping.obj2xml(xsdBasedObject)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM