我有一个输出XML字符串的函数:
<expensesAC>
<cashflow>
<month>6</month>
<cash>300</cash>
<projected>null</projected>
</cashflow>
<cashflow>
<month>6</month>
<cash>300</cash>
<projected>null</projected>
</cashflow>
<cashflow>
<month>6</month>
<cash>300</cash>
<projected>null</projected>
</cashflow>
</expensesAC>
我有一个名为genxml.xml.erb
的视图,并且重定向到mysite.com:3000/genxml.xml
。
我需要这个,因为flex需要传递XML文件。但是,我得到的是:
<body>
<expensesAC>
<cashflow>
<month>6</month>
<cash>300</cash>
<projected>null</projected>
</cashflow>
</expensesAC>
<cashflow>
<month>6</month>
<cash>300</cash>
<projected>null</projected>
</cashflow>
<cashflow>
<month>6</month>
<cash>300</cash>
<projected>null</projected>
</cashflow>
</body>
因此,基本上,Rails强制我的XML字符串为HTML。
如何使用我的字符串生成动态XML页面?或者,如何将XML字符串转换为动态生成的XML页面?我不想创建静态文件,这些文件需要动态生成,因为XML集中的数据将是每个用户的私有信息。
答案 0 :(得分:6)
如果要使用Rails编写XML文件,可能需要从ERB切换到Builder template handler。
如果您正在使用ActiveRecord对象,则在指定渲染选项时也可以使用方便的:xml
选项。
def index
@records = Model.all
respond_to do |format|
format.html
format.xml { render :xml => @records }
end
end
答案 1 :(得分:2)
我目前正在做你想要的没有问题。 ERB生成XML当然是最方便的方法之一,特别是如果输出主要是XML模板。它还可以做一些巧妙的技巧,比如使用集合渲染部分。
但是我知道这不常用于工作(必须使用builders),但我可以看到至少从Rails 2.3.5起,ERB方法似乎工作正常。
e.g。
class MyController < ApplicationController
def genxml
respond_to do |format|
format.xml
end
end
end
然后genxml.xml.erb生成一个有效的XML文件,你甚至可以做一些技巧:
<expensesAC>
<%= render :partial => 'expenses/cashflow', :collection => @expenses-%>
</expensesAC>
其中费用/ _cashflow.xml.erb类似于:
<cashflow>
<month><%= cashflow.month %></month>
<cash><%= cashflow.cash %></cash>
<projected><%= cashflow.projected %></projected>
</cashflow>
注意:交错的&lt; expenseAC&gt;和&lt; cashflow&gt;在您的示例中,可能表明您的XML生成逻辑中存在另一个问题。
答案 2 :(得分:1)
在控制器中,您需要将内容呈现为xml。类似的东西:
def show
respond_to do |format|
format.html
format.xml { render :xml => my_function_that_outputs_xml }
end
end