首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails XML Feed: ID作为节点属性

Rails XML Feed: ID作为节点属性
EN

Stack Overflow用户
提问于 2014-03-07 17:13:38
回答 2查看 157关注 0票数 0

我为我们使用的供应商(拒绝阅读JSON)设置了一个简单的XML提要。

代码语言:javascript
复制
<recipes type="array">
  <recipe>
    <id type="integer">1</id>
    <name>
      Hamburgers
    </name>
    <producturl>
      http://test.com
    </producturl>
    ...
  </recipe>
  ...
<recipe>

但是,供应商请求id不是id节点,而是父节点中的一个属性。例如:

代码语言:javascript
复制
<recipes type="array">
  <recipe id="1">
    <name>
      Hamburgers
    </name>
    <producturl>
      http://test.com
    </producturl>
    ...
  </recipe>
  ...
<recipe>

我是用(基本上)

代码语言:javascript
复制
xml_feed = []
recipes.each do |recipe|
  xml_feed <<{id: recipe.id, name: recipe.name, ...}
end
...
render xml: xml_feed.to_xml(root: 'recipes')

但我不知道如何将id (或任何字段)作为属性包含在父节点中,就像这样。我搜索了一下,找不到任何东西,http://api.rubyonrails.org/classes/ActiveRecord/Serialization.html文档也没有多大帮助

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-07 17:41:18

我建议你使用诺科吉里宝石。它提供了处理XML的所有可能需要。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-03-09 11:41:19

使用Nokogiri的建议是可以的。只是为了达到你的要求,新税应该有一点不同:

代码语言:javascript
复制
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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22256424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档