11

XSDからRubyクラス(おそらくActiveResourceクラス)を生成して、最初のXSDに有効なxmlにクラスをシリアル化する方法が含まれるようにする方法はありますか?

soap4rにxsd2rubyがあることは知っていますが、生成されたrubyクラスをxmlに簡単にシリアル化できないようです。

4

3 に答える 3

7

恥知らずな自己宣伝(これがstackoverflowで問題ないことを願っています)が、私はそれを行うためのオープンソースプロジェクトに取り組んでいます

まだ進行中の作業です (気軽にパッチを送ってください) が、最終的な目標は、XSD を Ruby クラスとの間で変換し (現在実行中です)、その XSD に準拠する XML をそれらのクラスのインスタンスとの間で変換することです。

于 2009-12-14T01:11:27.403 に答える
6

これは少し前に尋ねられましたが、私は解決策に出くわし、それが将来人々を助けるかもしれないと思いました。

私の必要性も同様でした。同僚からの.xsdがあり、そこからクラスファイルを生成したいと思います。私の望みは、オブジェクトを簡単にマーシャリングして、RESTfulエンドポイントに渡すことができるようになることです。そこで、彼のJavaサーバーはペイロードをアンマーシャルし、追加の作業なしでオブジェクトを彼の側で動的に構築します。

私が見つけた解決策は、 https://github.com/rubyjedi/soap4rsoap4rから取得することでした。binディレクトリ内の2つの*.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

完全を期すために、クラスを次のように拡張しました(これは「プロスペクト」クラスです)。

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 Objectには、すぐに使用できるaが付属してto_yamlto_jsonますが、XMLへの単純な変換は見つかりませんでした。それで、それは私自身の「to_xml」のロールに帰着しました。

お役に立てれば。

于 2011-03-31T17:28:13.627 に答える
4

これは機能する可能性があるようです。

「xsd/mapping」が必要 XSD::Mapping.obj2xml(xsdBasedObject)

于 2009-02-13T18:27:45.297 に答える