2011-02-05 1 views
14

まあ、私はNokogiriに簡単な問題があります。私は鋸山:: HTML :: Builderは、次の形式のHTMLフラグメントを作成するようにしたい:Nokogiri HTML Builderを使用して複数のルートノードを持つフラグメントを作成する

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

やろうとした場合:Document has already a root node、一部I:

@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 

を私はエラーを取得しますわかる。 Nokogiri :: HTML :: BuilderはNokogiri :: XML :: Builderから継承し、XML文書にはルートノードがなければならないとNokogiri氏は期待しています。しかし、私はXML文書を構築していません。

何か不足していますか?どんな種類の助けでも大歓迎です。

答えて

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 
+0

+1を、私はビルダーは、任意の文書を受け入れることができることを知りませんでした。よくやった。 – Phrogz

+0

Omgありがとうございました!それはトリックでした!再度、感謝します :) – Gerry

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  
関連する問題