2011-05-06 51 views
1

我有這樣的內容:爲什麼Nokogiri去除內容?

<div class="CodeRay"> 
    <div class="code"><pre>puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Hello, world!</span><span style="color:#710">&quot;</span></span></pre></div> 
</div> 

,我想用引入nokogiri將其添加到一個HTML文檔:

File.open("frame2.html", "r") do |file| 
    doc = Nokogiri::HTML.parse(file) 
end 
doc.at_css("body") = content # this is my content 
puts doc.to_html 

然後內容轉換成這樣:

&lt;div class="CodeRay"&gt; 
    &lt;div class="code"&gt;&lt;pre&gt;puts &lt;span style="background-color:#fff0f0;color:#D20"&gt;&lt;span style="color:#710"&gt;&amp;quot;&lt;/span&gt;&lt;span style=""&gt;Hello, world!&lt;/span&gt;&lt;span style="color:#710"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt; 
&lt;/div&gt; 

的另一部分HTML文件是可以的。問題是爲什麼Nokogiri去掉內容?爲什麼它會將其轉換爲HTML實體?

回答

7

我重新格式化你內心的HTML使它有點更具可讀性作爲樣本。

引入nokogiri不剝什麼,它只是編碼所添加的內容,因爲你告訴它來。

除非你告訴引入nokogiri新文本已經HTML它會假設你要添加的文字,而且,因爲文本包含應該編碼的字符,它編碼它。

下面是如何做你真正想要的:

require "nokogiri" 

html = '<div class="CodeRay"> 
    <div class="code"> 
    <pre>puts <span style="background-color:#fff0f0;color:#D20"> 
     <span style="color:#710">&quot;</span> 
     <span style="">Hello, world!</span> 
     <span style="color:#710">&quot;</span> 
     </span> 
    </pre> 
    </div> 
</div>' 

doc = Nokogiri::HTML('<html><body></body></html>') 
doc.at('body').inner_html = html 
puts doc.to_html 

>> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
>> <html><body><div class="CodeRay"> 
>> <div class="code"> 
>>  <pre>puts <span style="background-color:#fff0f0;color:#D20"> 
>>  <span style="color:#710">"</span> 
>>  <span style="">Hello, world!</span> 
>>  <span style="color:#710">"</span> 
>>  </span> 
>>  </pre> 
>> </div> 
>> </div></body></html>