我想在 ruby 和 XML 中的其他应用程序之间进行通信。我已经为这种通信定义了一个模式,并且我正在寻找将 Ruby 中的数据转换为 XML 的最佳方法,反之亦然。
我有一个 XML 文档my_document.xml
:
<myDocument>
<number>1</number>
<distance units="km">20</distance>
</myDocument>
它符合 Schema my_document_type.xsd
(我不会在这里写出来)。
现在我想从XSD 自动生成以下类 - 这是合理的还是可行的?
# Represents a document created in the form of my_document_type.xsd
class MyDocument
attr_accessor :number, :distance, :distance_units
# Allows me to create this object from data in Ruby
def initialize(data)
@number = data['number']
@distance = data['distance']
@distance_units = data['distance_units']
end
# Takes an XML document of the correct form my_document.xml and populates internal systems
def self.from_xml(xml)
# Reads the XML and populates:
doc = ALibrary.load(xml)
@number = doc.xpath('/number').text()
@distance = doc.xpath('/distance').text()
@distance_units = doc.xpath('/distance').attr('units') # Or whatever
end
def to_xml
# Jiggery pokery
end
end
所以现在我可以这样做:
require 'awesomelibrary'
awesome_class = AwesomeLibrary.load_from_xsd('my_document_type.xsd')
doc = awesome_class.from_xml('my_document.xml')
p doc.distance # => 20
p doc.distance_units # => 'km'
我也可以
doc = awesome_class.new('number' => 10, 'distance_units' => 'inches', 'distance' => '5')
p doc.to_xml
并得到:
<myDocument>
<number>10</number>
<distance units="inches">5</distance>
</myDocument>
这对我来说听起来像是相当强大的功能,所以我不期待一个完整的答案,但是关于已经这样做的库的任何提示(我试过使用 RXSD,但我不知道如何让它去做这个)或任何可行性想法等等。
提前致谢!