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

Ну, у меня есть простая проблема с Нокогири.Я хочу, чтобы 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 должен иметь корневой узел).Но я не создаю документ XML.

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

Ответы [ 2 ]

25 голосов
/ 05 февраля 2011

Как вы заметили, 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
0 голосов
/ 18 октября 2017

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

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