Ruby 如何使用Roar::Decorator呈现普通XML属性
我试图在Roar::Decorator中呈现一个普通的XML输出。由于某些原因,不可能获得未转换的输出 我有这门课:Ruby 如何使用Roar::Decorator呈现普通XML属性,ruby,xml,decorator,rails-roar,Ruby,Xml,Decorator,Rails Roar,我试图在Roar::Decorator中呈现一个普通的XML输出。由于某些原因,不可能获得未转换的输出 我有这门课: class GetShopProductsRequest < OpenStruct def data_filter xml_s = [] xml_s << "<Filter>" xml_s << " <FilterName>#{self.filter_name}</FilterName&g
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
并创建XML输出。要_XML
输出为
<DataFilter><Filter>
<FilterName>bla</FilterName>
<FilterValues>
<FilterValue>test</FilterValue>
</FilterValues>
</Filter></DataFilter>
过滤器
过滤器名称bla/过滤器名称
过滤值
FilterValue测试/FilterValue
/过滤值
/滤器
我尝试在代码中的几个位置使用
html\u-safe
,但结果没有改变。我建议使用类似的方法
这允许您执行以下操作:
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
GetShopProductsRequestPresenter.new(GetShopProductsRequest.new(filter_value=>123,:filter_name=>“test”))在filter_value处包含语法错误,需要为:filter_value,这是导致您的问题的原因吗?感谢您提供的信息,但这不是问题,这只是一个输入错误。我更新了itThanks以获得响应,但问题不是构造XML,尽管您建议的解决方案比我做的更好(我以前使用过Nokogiri)。问题是,为representer调用
.to_xml
会转义xml字符串。我想避免那样。对不起,这不是。。。它产生与原始字符串相同的输出,或者Nokogiri认为您忘记了在openstruct中“包含Roar::XML”,阅读:您的意思是在GetShopProductsRequest
类中?在GetShopProductsRequest
中包含Roar::XML
不会更改任何内容
<DataFilter><Filter>
<FilterName>bla</FilterName>
<FilterValues>
<FilterValue>test</FilterValue>
</FilterValues>
</Filter></DataFilter>
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