2015-12-21 26 views
0

我想在Roar :: Decorator中呈现纯XML输出。出于某种原因,不可能获得非转义的输出。如何使用Roar :: Decorator呈现纯XML属性

我有这个类:

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> 

我试图在代码在serveral的斑点使用html_safe但没有改变的结果。

+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相同的输出 –