Использование Nokogiri HTML Builder для создания фрагмента с несколькими корневыми узлами

Ну, у меня есть простая проблема с Нокогири. Я хочу сделать Nokogiri:: HTML:: Builder для создания фрагмента HTML следующего вида:

<div>
#Some stuff in here
</div>
<div>
#Some other stuff in here
</div>

При попытке сделать:

@builder = Nokogiri::HTML::Builder.new(:encoding => 'UTF-8') do |doc|
    doc.div {
      doc.p "first test"
    }
    doc.div {
      doc.p "second test"
    }
  end
@builder.to_html

Я получаю сообщение об ошибке: Document has already a root node, что я частично понимаю. Я знаю, что я не обертываю все это в теги (которые Nokogiri ожидает, когда Nokogiri:: HTML:: Builder наследует от Nokogiri:: XML:: Builder, а XML-документ должен иметь корень node). Но я не строю XML-документ.

Я что-то упустил? Любая помощь очень ценится.

Ответы

Ответ 1

Как вы отметили, Builder не позволит вам создать HTML-документ с несколькими корневыми узлами. Вам нужно использовать DocumentFragment

@doc = Nokogiri::HTML::DocumentFragment.parse ""

Nokogiri::HTML::Builder.with(@doc) do |doc|
    doc.div {
      doc.p "first test"
    }
    doc.div {
      doc.p "second test"
    }
end

puts @doc.to_html

Ответ 2

Вот что я сделал для замены изображений src attributes:

  doc = Nokogiri::HTML(html)
   doc.xpath("//img").each do |img|
     img.attributes["src"].value = Absolute_asset_path(img.attributes["src"].value)
  end
  doc.to_html