首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Rails生成动态XML页面?

如何使用Rails生成动态XML页面?
EN

Stack Overflow用户
提问于 2009-07-02 19:53:19
回答 3查看 8.7K关注 0票数 5

我有一个输出XML字符串的函数:

代码语言:javascript
复制
<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文件。然而,我得到的是:

代码语言:javascript
复制
<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集中的数据将是每个用户的私有信息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-02 20:06:06

如果想用Rails编写XML文件,可能需要从ERB切换到Builder template handler

如果使用的是渲染对象,则在指定渲染选项时也可以使用handy :xml选项。

代码语言:javascript
复制
def index
  @records = Model.all
  respond_to do |format|
    format.html
    format.xml { render :xml => @records }
  end
end
票数 7
EN

Stack Overflow用户

发布于 2010-08-13 15:23:31

我现在做的就是你想要的,没有问题。ERB生成XML肯定是最方便的方法之一,特别是在输出主要是XML模板的情况下。它还使得使用集合呈现部分参数等巧妙的技巧成为可能。

但我知道这不能正常工作(必须使用builders),但是我可以看到,至少从Rails 2.3.5开始,ERB方法似乎工作得很好。

例如:

代码语言:javascript
复制
class MyController < ApplicationController
  def genxml
    respond_to do |format|
      format.xml 
    end
  end
end

然后genxml.xml.erb会生成一个有效的XML文件,您甚至可以这样做:

代码语言:javascript
复制
<expensesAC>
<%= render :partial => 'expenses/cashflow', :collection => @expenses-%>
</expensesAC>

其中expenses/_cashflow.xml.erb类似于:

代码语言:javascript
复制
<cashflow>
  <month><%= cashflow.month %></month>
  <cash><%= cashflow.cash %></cash>
  <projected><%= cashflow.projected %></projected>
</cashflow>

注意:在您的示例中,交错的和可能表示在XML生成逻辑中潜伏着另一个问题。

票数 2
EN

Stack Overflow用户

发布于 2009-07-02 20:04:00

在控制器中,您需要将内容呈现为xml。类似于:

代码语言:javascript
复制
def show
  respond_to do |format|
    format.html
    format.xml { render :xml => my_function_that_outputs_xml }
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1076353

复制
相关文章

相似问题

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