Using Nokogiri HTML Builder to create fragment wit

2019-02-04 13:01发布

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.

标签: ruby nokogiri
2条回答
Luminary・发光体
2楼-- · 2019-02-04 13:35

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
查看更多
祖国的老花朵
3楼-- · 2019-02-04 13:38

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     
查看更多
登录 后发表回答