如何使用Rails生成XML?

时间:2012-01-06 03:45:53

标签: ruby-on-rails ruby xml

我需要创建一个XML文件输出,如:

<data>
    <hour>0</hour>
    <count>8</count>
</data>
.
.
<data>
    <hour>23</hour>
    <count>1</count>
</data>

我在控制器中编写了以下代码:

for @k in (0..23)
  @data.push(Datum.new(@k,@freq[@k]));
end

class Datum  
  def initialize(hour, count)  
    @hour = hour  
    @count = count  
  end  
end

render xml:@data

但输出结果如下:

    tweet-densities-controller-data type="array">
    <tweet-densities-controller-datum type="TweetDensitiesController::Datum">#
    TweetDensitiesController::Datum:0xacbddc4></tweet-densities-controller-datum>

2 个答案:

答案 0 :(得分:2)

您可能需要查看构建器:Generating custom XML for your rails app

答案 1 :(得分:0)

这里发生的是当你render :xml => @data执行时,Rails正在尝试将@data(这是一个数组)转换为其XML表示形式。在这种情况下,这不是你想要的。

在您的Datum类上定义#to_xml方法,然后您可以执行以下操作:

@data.map(&:to_xml).join("\n")

将为每个对象调用#to_xml方法,然后将它们连接起来,用换行符分隔每个条目。

如果你想要结构良好的XML数据(看起来不像你的例子)那么你应该使用像jessecurry建议的类似Builder的东西。