【问题标题】:Can I respond with XML to an HTML request in Rails?我可以用 XML 响应 Rails 中的 HTML 请求吗?
【发布时间】:2013-04-24 15:12:35
【问题描述】:

我想放入一个简单的 API 来响应带有查询字符串的 GET 请求。但我想返回 XML,而不是 HTML。

我什至想在浏览器中对此进行测试,这样如果我键入 URL 和查询字符串,则可以在响应中看到 XML。

我只是通过渲染:text 来获得它,但是我的 xml 正在做两件事:

1. All tag names are being downcased.

2. My xml is being wrapped in an HTML container (HTML, HEAD, BODY, etc.)

我只需要摆脱那个 HTML 包装器。

【问题讨论】:

  • 您是否为此操作设置了布局?也许:layout => false 可以解决问题。
  • layout: false 仍在给我包装。

标签: ruby-on-rails xml rendering


【解决方案1】:

这个对我有用:

respond_to do |format|
  format.xml do
    headers['Content-Disposition'] = 'attachment;filename="katalog.xml"'
    render :xml => xml_array.to_xml(:skip_types => true, :root => "Items"),
           :layout => false,
           :content_type => Mime::XML
  end
end

您应该能够用您的字符串替换 xml_array.to_xml(:skip_types => true, :root => "Items"),因为 .to_xml 除了生成字符串(并确保它是正确的 XML)之外没有其他任何作用

【讨论】:

    【解决方案2】:

    您可以简单地呈现为 xml(在您的控制器中):

    render xml: @your_object
    

    【讨论】:

    • 我正在从头开始构建 XML 字符串,所以我不想为我自动完成任何事情。
    • 哦,好的。无论如何,呈现为 :text 不应以任何方式修改您的字符串,也不应添加包装器。我刚刚尝试过,但无法重现您的问题。
    • Oktav 你是对的,是 Firebug 添加了包装器。当我查看原始来源时,它很好。
    【解决方案3】:

    layout false,仅:[:action]

    这将删除所有与布局相关的代码。

    【讨论】:

      【解决方案4】:

      在 Rails 5.2.x 上,你就是这样做的

      class UserController < ApplicationController
        def view
          @user = User.find(params[:id])
          render formats: [:xml]
        end
      end
      

      在 app/views/user/view.xml 上有相应的视图

      xml.User do
        xml.name @user.name
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 2019-07-01
        • 2021-07-29
        相关资源
        最近更新 更多