2015-12-21 25 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相同的輸出 –