0

我正在尝试在 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>

我尝试html_safe在代码中的多个位置使用,但没有改变结果。

4

1 回答 1

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
于 2015-12-21T10:24:18.120 回答