我有这样的内容:
<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>
我希望使用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
然后内容转换为:
<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>
HTML文件的另一部分是可以的。问题是为什么Nokogiri剥离内容?为什么要将其转换为HTML实体?
答案 0 :(得分: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">"</span>
<span style="">Hello, world!</span>
<span style="color:#710">"</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>