如果您的问题将通过简单地重命名或包装在父节点中来解决,我实际上会感到非常惊讶,并且我假设您在接近解决方案时会遇到更多的服务问题。我(不幸的是)以前曾在这艘船上,所以我正在写我学到的东西。
一般来说,当服务需要一些复杂或丑陋的 XML 时,我发现通过 ActiveResource 处理服务有点困难。在这些情况下,我的解决方案不可避免地会覆盖对象的 to_xml 方法,因为创建 (POST) 或更新 (PUT) 应该在内部调用对象的 to_xml 以将数据序列化为 XML。所述方法可以使用 ruby 的 xml 构建器,或者您也可以使用“此处文档”来处理更棘手的内容。我认为底线是,您必须确切地知道您的服务期望什么,并构建该结构以发送给服务。
例如使用 'here document' 来强制使用不友好的 xml 结构:
class User << ActiveResource::Base
def to_xml
xml =<<-EOS
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<platform_user>
<user xsi:type="userData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<userId>#{self.id}</userId>
<userName>#{self.name}</userName>
<addresses>
<address>
<address1>#{self.address1}</address1>
<addressZip>#{self.zip}</addressZip>
</address>
</addresses>
</user>
</platform_user>
EOS
xml.gsub(/\n|\t|\r/,"").strip #clean it up.
end
end
您也可以使用 XML Builder 它适用于您的结构,例如:
def to_xml
xml = Builder::XmlMarkup.new()
xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8", :standalone=>"yes"
xml.platform_user do
xml.user do
xml.userId self.id
...
end
end
end
祝你好运。