0

我正在为特定模型在 rails 中编写自己的 to_xml 方法。但是,当递归调用我的方法时,to_xml 方法会将结果编码为特殊实体。

这是我的方法:

  def to_xml(options = {})
    require 'builder'
    options[:indent] ||= 2
    xml = options[:builder] ||= ::Builder::XmlMarkup.new(:indent => options[:indent] )
    xml.instruct! unless options[:skip_instruct]
    xml.node {
      if self.nodeparent
        xml.layout( self.nodeparent.to_xml(:skip_instruct=>true,:indent=>2) )
      end
      xml.package{
        self.package('Node').each do |node|
        end
      }
      xml.template{
        xml.name(self.template.name )
        xml.file(self.template.file )
      }
    }
  end

“xml.layout”部分在同一模型的另一个实例上再次调用 to_xml 方法。然而,结果源代码不是有效的 XML,而是一个编码字符串。:

<?xml version="1.0" encoding="UTF-8"?>
<node>
  <layout>&lt;node&gt;
  &lt;package&gt;
  &lt;/package&gt;
  &lt;template&gt;
    &lt;name&gt;mainlayout&lt;/name&gt;
    &lt;file&gt;mainlayout&lt;/file&gt;
  &lt;/template&gt;
&lt;/node&gt;
</layout>
  <package>
  </package>
  <template>
    <name>homepage</name>
    <file>homepage</file>
  </template>
</node>

有没有办法解决这个问题?我应该使用 Nokogiri 吗?

4

1 回答 1

0

Nokogiri 是各种 XML 争论的流行选择,但构建器可以做你想做的事。

Builder 默认假定您给它的任何字符串都是需要转义的内容。如果不是这样,您可以使用<<直接附加 XML,即

xml.layout { xml << " some raw content" }
于 2013-06-17T07:44:54.127 回答