Auch wenn diese Frage vor einiger Zeit gestellt wurde, bin ich auf eine Lösung gestoßen und dachte, dass sie zukünftigen Personen helfen könnte.
Mein Bedarf war ähnlich. Ich habe eine .xsd von einem Kollegen und möchte gerne eine Klassendatei daraus generieren. Ich hoffe, dass ich das Objekt leicht marshallen und es an seinen RESTful Endpunkt übergeben kann, wo sein Java-Server das Nutzlast entmarshalled und das Objekt auf seiner Seite dynamisch aufbaut, ohne zusätzlichen Aufwand.
Die Lösung, die ich gefunden habe, war, das soap4r
von https://github.com/rubyjedi/soap4r zu bekommen. Ich habe die beiden *.rb-Dateien im bin-Verzeichnis ausführbar gemacht und dann ausgeführt:
bin/xsd2ruby.rb --xsd .xsd --classdef
Dies generierte eine neue Datei, in der jede xsd:complexType
als Klasse implementiert wurde. Alle anderen komplexen Typen wurden ebenfalls mit den korrekten Vererbungsbeziehungen generiert und alle xsd:element
wurden als Instanzvariablen definiert und ein Klassen-Initializer wurde auch definiert.
Das Ausführen von xsd2ruby.rb
für sich allein ergab die folgenden Optionen:
~/src/test/soap4r:bin/xsd2ruby.rb
Usage: bin/xsd2ruby.rb --xsd xsd_location [options]
xsd_location: Dateiname oder URL
Beispiel:
bin/xsd2ruby.rb --xsd myapp.xsd --classdef foo
Optionen:
--xsd xsd_location
--classdef [Dateipräfix]
--mapping_registry
--mapper
--module_path [Modul::Pfad::Name]
--force
--quiet
Zur Vollständigkeit habe ich meine Klasse wie folgt erweitert (dies ist eine "Prospect" Klasse):
class Prospect
include Enumerable
def each(&block)
self.instance_variables.collect{|v| (v.gsub /@/, '').to_sym }.each(&block)
end
end
Dies erlaubte mir, es als den Inhalt einer Net::HTTP::Post
Anfrage zu verwenden.
Zur Frage nach einem kostenlosen to_xml
: Ich habe es nicht gefunden. Das Ruby-Objekt wird standardmäßig mit einem to_yaml
und to_json
geliefert, aber ich habe keine einfache Konvertierung zu XML gefunden. Also kam es darauf an, mein eigenes "to_xml" zu machen.
Hoffe, das hilft.
0 Stimmen
Es gibt einen Weg, wie du ActiveRecord-Klassen-Objekte zu XML serialisieren kannst. Aber ich glaube nicht, dass du nach so etwas suchst.