我为我们正在使用的供应商(拒绝阅读JSON)设置了一个简单的XML Feed。
<recipes type="array">
<recipe>
<id type="integer">1</id>
<name>
Hamburgers
</name>
<producturl>
http://test.com
</producturl>
...
</recipe>
...
<recipe>
但是,供应商要求不是拥有id节点,而是父节点中的属性。 e.g。
<recipes type="array">
<recipe id="1">
<name>
Hamburgers
</name>
<producturl>
http://test.com
</producturl>
...
</recipe>
...
<recipe>
我正在建立这个(基本上)
xml_feed = []
recipes.each do |recipe|
xml_feed <<{id: recipe.id, name: recipe.name, ...}
end
...
render xml: xml_feed.to_xml(root: 'recipes')
但我不确定如何将id(或任何字段)作为属性包含在父节点中。我用Google搜索,找不到任何内容,http://api.rubyonrails.org/classes/ActiveRecord/Serialization.html文档也没有帮助
谢谢!
答案 0 :(得分:1)
我建议你使用nokogiri宝石。它提供了处理XML
。
builder = Nokogiri::XML::Builder.new do |xml|
xml.root {
xml.objects {
xml.object.classy.thing!
}
}
end
puts builder.to_xml
<?xml version="1.0"?>
<root>
<objects>
<object class="classy" id="thing"/>
</objects>
</root>
答案 1 :(得分:1)
使用Nokogiri的建议很好。只是语法应该有点不同,以实现您的要求:
builder = Nokogiri::XML::Builder.new do |xml|
xml.root {
xml.object('type' => 'Client') {
xml.name 'John'
}
}
end
puts builder.to_xml
<?xml version="1.0"?>
<root>
<object type="Client">
<name>John</name>
</object>
</root>