如何使用Nokogiri Builder添加评论

时间:2012-02-26 22:42:40

标签: ruby xml nokogiri

如何使用Nokogiri的构建器向XML添加<!-- blahblah -->评论?

我希望有类似的东西:

<root>
  <!--blahblah-->
  <child/>
</root>

我尝试这样的事情:

Nokogiri::XML::Builder.new do |xml|
  xml.root {
    xml.comment('blahblah')
    xml.child
  }
end

但这给了我:

<root>
  <comment>blahblah</comment>
  <child/>
</root>

3 个答案:

答案 0 :(得分:4)

您可以使用this bug documented future feature not present in the current release解决Builder#<<,如下所示:

require 'nokogiri'

xml = Nokogiri::XML::Builder.new do |xml|
  xml.root {
    xml << '<!--blahblah-->'
    xml.child
  }
end

puts xml.doc.root.to_xml
#=> <root>
#=>   <!--blahblah-->
#=>   <child/>
#=> </root>

或者,您可以在自己的未来方法版本中进行monkeypatch:

class Nokogiri::XML::Builder
  def comment(string)
    insert Nokogiri::XML::Comment.new( doc, string.to_s )
  end
end

答案 1 :(得分:1)

由于V1.6.8支持comment - 选项,因此您无需使用<<

如果您需要评论标记,可以使用comment_(最后使用下划线)。

示例:

builder = Nokogiri::XML::Builder.new do |xml|
  xml.root { 
    xml.comment 'My comment' 
    xml.comment_ 'My comment-tag' 
  }
end
puts builder.to_xml

结果:

<?xml version="1.0"?>
<root>
  <!--My comment-->
  <comment>My comment-tag</comment>
</root>

答案 2 :(得分:0)

顺便说一下,它可能很明显,但是现在xml.comment创建了一个XML注释,如果你必须创建一个元素<comment>,你必须使用

  xml << "<comment>#{comment}</comment>"

它刚好发生在我身上。感谢暗示&lt;&lt;方法