【问题标题】:Rails: rendering XML adds <hash> tagRails:渲染 XML 添加 <hash> 标签
【发布时间】:2013-10-17 13:14:56
【问题描述】:

我有一个 Rails 控制器,它将以 XML 格式输出哈希 - 例如:

class MyController < ApplicationController
  # GET /example.xml
  def index        
    @output = {"a" => "b"}

    respond_to do |format|
      format.xml  {render :xml => @output}
    end
  end
end

但是,Rails 添加了一个我不想要的 标签,即:

<hash>
  <a>
    b
  </a>
</hash>

我怎样才能输出这个呢?

<a>
  b
</a>

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我认为,如果您要将对象转换为 XML,则需要一个包装所有内容的标签,但您可以自定义包装器的标签名称:

    def index        
      @output = {"a" => "b"}
    
      respond_to do |format|
        format.xml  {render :xml => @output.to_xml(:root => 'output')}
      end
    end
    

    这将导致:

    <output>
      <a>
        b
      </a>
    </output>
    

    【讨论】:

    • 这就是我需要的。谢谢!
    • 标签“输出”可能适合他的需要,但它不能回答问题。什么都没有被删除......它只是被替换了。根仍然存在。
    • XML 只能有一个根元素,因此虽然删除根元素并仅输出 &lt;a /&gt; 是微不足道的,但只要他想输出该示例就会崩溃不止一个属性。这个答案的目的是强调单个根元素的重要性,并向他展示如何更改根元素的名称。
    • 谁在乎 xml 规范是什么?和问题完全无关!!!!如果我们正在使用不使用根元素的 API 怎么办?我们是否应该告诉我们的客户,我们不能使用那个 API——他们是不遵守规范的坏人?如果我们需要从碰巧是散列的几个来源中分别组合 xml 位怎么办?如果您无法回答实际问题,请不要用您的圣言浪费每个人的带宽。
    【解决方案2】:

    我遇到了同样的问题;

    这是我的 XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <Contacts>
      <Contact type="array">
      </Contact>
    </Contacts>
    

    我用的是这个:

    entries.to_xml
    

    将哈希数据转换为 XML,但这会将条目的数据包装到 &lt;hash&gt;&lt;/hash&gt;

    所以我修改了:

    entries.to_xml(root: "Contacts")
    

    但这仍然将转换后的 XML 包装在“联系人”中。将我的 XML 代码修改为

    <Contacts>
     <Contacts>
      <Contact type="array">
       <Contact>
        <Name></Name>
        <Email></Email>
        <Phone></Phone>
       </Contact>
      </Contact>
     </Contacts>
    </Contacts>
    

    所以它添加了一个额外的 ROOT,我不想在那里。

    现在对我有用的解决方案是:

     entries["Contacts"].to_xml(root: "Contacts")
    

    避免&lt;hash&gt;&lt;/hash&gt; 或任何额外的根被包括在内。 干杯!!

    【讨论】:

    • 在应用您的解决方案时出现此错误 NoMethodError: undefined method `to_xml' for nil:NilClass
    • @KartikAgarwal 似乎您的条目对象没有填充“联系人”。你能检查一下为什么会这样吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2015-01-22
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多