Rails: рендеринг XML добавляет тег <hash> - PullRequest
13 голосов
/ 05 июня 2011

У меня есть контроллер 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>

Ответы [ 2 ]

18 голосов
/ 05 июня 2011

Я думаю, что если вы конвертируете объект в 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>
6 голосов
/ 30 сентября 2013

У меня была такая же проблема;

Это мой XML:

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

Я использовал это:

entries.to_xml

для преобразования хеш-данных в XML, но это оборачивает данные записей в <hash></hash>

Итак, я изменил:

entries.to_xml(root: "Contacts")

но это все еще обернуло конвертированный XML в «Контакты». изменив мой XML-код на

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

Так что это добавляет дополнительный КОРЕНЬ, которого я не хочу там.

Теперь решение, которое сработало для меня:

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

, который избегает <hash></hash> или любого дополнительного корня, который будет включен. Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...