Ruby on rails 如何删除<;散列></散列>;从format.xml
我有一个对象,Ruby on rails 如何删除<;散列></散列>;从format.xml,ruby-on-rails,ruby,ruby-on-rails-3.1,Ruby On Rails,Ruby,Ruby On Rails 3.1,我有一个对象,有许多子对象,这些子对象应该呈现为xml。这不是问题。我的问题是,我创建了一个包含这些数据的散列,就像解析器需要它一样。但是rails原子性地用 <hash> <objects type="array"> <object> ... ... ... </object> </objects> </hash&g
有许多子对象,这些子对象应该呈现为xml。这不是问题。我的问题是,我创建了一个包含这些数据的散列,就像解析器需要它一样。但是rails原子性地用
<hash>
<objects type="array">
<object>
...
...
...
</object>
</objects>
</hash>
...
...
...
我需要摆脱type=“array”
和
我如何处理这个问题?我没有在文档中找到任何内容。我也有同样的问题
render :xml => @objects.to_xml(:root => :root_name, :skip_types => true)
这是我的XML:
<?xml version="1.0" encoding="UTF-8"?>
<Contacts>
<Contact type="array">
</Contact>
</Contacts>
将散列数据转换为XML,但这会将条目的数据包装成
所以我修改了:
entries.to_xml(root: "Contacts")
但这仍然将转换后的XML包装在“Contacts”中,将我的XML代码修改为
<Contacts>
<Contacts>
<Contact type="array">
<Contact>
<Name></Name>
<Email></Email>
<Phone></Phone>
</Contact>
</Contact>
</Contacts>
</Contacts>
这样可以避免包含
或任何附加根。
干杯 在现实世界中进行实际开发时,有各种各样的原因可以解释为什么您可能需要XML片段,即使您非常清楚实际的XML规范规定了一个根
但是,ActiveSupport的Hash#to_xml
不支持此功能
下面是一个方法(外接程序config/initializers/rootless_xml.rb
):
您是否尝试过使用xml
方法?看起来这正是你的情况谢谢你做了一部分我自己找到了其余的=>:skip_types=>true
@davidb像回答一样发布,但2天内无法接受答案我的输出xml中有标签。。。这不是我读到的问题的意图。“数组”已消失,但刚刚重命名。。还是那样。看起来不错:?[1,2,3]。到\u xml(:root=>:objects,:skip\u types=>true)=>“\n\n 1\n 2\n 3\n\n”
<Contacts>
<Contacts>
<Contact type="array">
<Contact>
<Name></Name>
<Email></Email>
<Phone></Phone>
</Contact>
</Contact>
</Contacts>
</Contacts>
entries["Contacts"].to_xml(root: "Contacts")
class Hash
def to_rootless_xml(options = {})
require 'active_support/builder' unless defined?(Builder)
options = options.dup
options[:indent] ||= 2
options[:root] ||= 'hash'
options[:builder] ||= Builder::XmlMarkup.new(indent: options[:indent])
builder = options[:builder]
builder.instruct! unless options.delete(:skip_instruct)
each { |key, value| ActiveSupport::XmlMini.to_tag(key, value, options) }
yield builder if block_given?
builder.target!
end
end