【问题标题】:Why does Nokogiri strip the content?为什么 Nokogiri 会剥离内容?
【发布时间】:2011-05-06 23:21:22
【问题描述】:

我有这个内容:

<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 实体?

【问题讨论】:

    标签: html ruby nokogiri


    【解决方案1】:

    我重新格式化了您的内部 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>
    

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 2022-10-02
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 2012-10-19
      相关资源
      最近更新 更多