Using Nokogiri HTML Builder to create fragment with multiple root nodes

喜夏-厌秋 提交于 2019-11-29 06:47:14

问题


Well I have a simple problem with Nokogiri. I want to make Nokogiri::HTML::Builder to make an HTML fragment of the following form:

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

When trying to do:

@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

I get an error: Document has already a root node, which I partly understand. I know I am not wrapping the whole thing into tags (which Nokogiri expects as Nokogiri::HTML::Builder inherits from Nokogiri::XML::Builder and an XML document must have a root node). But I am not building an XML document.

Am I missing something? Any kind of help is much appreciated.


回答1:


As you noted, Builder will not allow you to build an HTML document with multiple root nodes. You'll need to use 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:


Here is what I did for replacing images 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     


来源:https://stackoverflow.com/questions/4906681/using-nokogiri-html-builder-to-create-fragment-with-multiple-root-nodes

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!