Как добавить комментарий с Nokogiri Builder - PullRequest
5 голосов
/ 27 февраля 2012

Как добавить комментарий <!-- blahblah --> в XML с помощью Nokogiri's Builder?

Я хочу что-то вроде:

<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 ]

4 голосов
/ 29 февраля 2012

Вы можете обойти эту ошибку документированную будущую функцию, отсутствующую в текущем выпуске , используя 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
2 голосов
/ 26 июля 2016

Поскольку 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>
0 голосов
/ 20 ноября 2013

Кстати, это может быть очевидно, но поскольку xml.comment создает XML-комментарий сейчас, если вам нужно создать элемент <comment>, вы должны использовать

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

Это только что произошло со мной.Спасибо за намеки на метод <<. </p>

...