2015-12-21 2 views
0

Я пытаюсь отобразить простой XML-выход в Roar :: Decorator. По какой-то причине невозможно получить неэкранированный вывод.Как визуализировать простые свойства XML с помощью Roar :: Decorator

У меня есть этот класс:

class GetShopProductsRequest < OpenStruct 

    def data_filter 
    xml_s = [] 
    xml_s << "<Filter>" 
    xml_s << " <FilterName>#{self.filter_name}</FilterName>" 
    xml_s << " <FilterValues>" 
    xml_s << " <FilterValue>#{self.filter_value}</FilterValue>" 
    xml_s << " </FilterValues>" 
    xml_s << "</Filter>" 

    xml_s.join("\n") 
    end 

end 

и следующий МЕНЕДЖЕР:

class GetShopProductsRequestRepresenter < RequestRepresenter 

    property :data_filter, as: :DataFilter 

end 

, который наследуется от Roar::Decorator и включает в себя Roar::XML

Однако, когда я создаю мой экземпляр МЕНЕДЖЕР с

GetShopProductsRequestRepresenter.new(GetShopProductsRequest.new(:filter_value => 123, :filter_name => "test")) 

и создать вывод XML .to_xml выхода является

<DataFilter>&lt;Filter&gt; 
     &lt;FilterName&gt;bla&lt;/FilterName&gt; 
     &lt;FilterValues&gt; 
     &lt;FilterValue&gt;test&lt;/FilterValue&gt; 
     &lt;/FilterValues&gt; 
    &lt;/Filter&gt;</DataFilter> 

Я пытался использовать html_safe в Serveral мест в коде, но ничего не изменило результат.

+0

GetShopProductsRequestRepresenter.new (GetShopProductsRequest.new (FILTER_VALUE => 123,: FILTER_NAME => "тест")) содержит синтаксическая ошибка в filter_value, должна быть: filter_value, это вызывает вашу проблему? – Laurens

+0

спасибо за информацию, но это не проблема, это просто опечатка здесь. Я обновил его –

ответ

0

Я предложил бы использовать что-то вроде https://github.com/jimweirich/builder

Это позволяет сделать:

require 'builder' 

def filter_xml 
    xml = Builder::XmlMarkup.new(:indent => 2) 
    xml.instruct! :xml, :encoding => "ASCII" 
    xml.Filter do 
    xml.FilterName do 
     self.filter_name        
    end 
    end 
end 

puts filter_xml 
+0

Спасибо за ответ, но проблема заключается не в том, чтобы построить XML, хотя ваше предлагаемое решение лучше, чем то, что я сделал (раньше я использовал Nokogiri). Проблема заключается в том, что вызов '.to_xml' для репрезентатора - это экранирование строки XML. Я хочу этого избежать. –

+0

Он будет работать, если вы используете пример, предоставленный – Laurens

+0

извините, но его нет ... он производит тот же результат, что и с необработанной строкой, или nokogiri –

Смежные вопросы