使用Nokogiri HTML Builder创建具有多个根节点的片段

时间:2011-02-05 11:51:46

标签: ruby nokogiri

我和Nokogiri有一个简单的问题。我想让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 个答案:

答案 0 :(得分:25)

如您所述,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

答案 1 :(得分:0)

这是我为替换图像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