Почему Nokogiri лишает контента? - PullRequest
1 голос
/ 07 мая 2011

У меня есть этот контент:

<code><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>

, и я хочу добавить его в HTML-документ, используя Nokogiri:

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-объекты?

1 Ответ

7 голосов
/ 07 мая 2011

Я переформатировал ваш внутренний HTML, чтобы сделать его более читабельным в качестве образца.

Nokogiri ничего не вырезает, он только кодирует добавляемый контент, потому что вы говорите ему.

Если вы не сообщите Nokogiri, что новый текст уже является HTML, он будет предполагать, что вы добавляете текст, и, поскольку текст содержит символы, которые должны быть закодированы, он кодирует его для вас.

Вот как это сделатьВы действительно хотите:

<code>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>
    
'doc = Nokogiri :: HTML (' ') doc.at (' body '). inner_html =html помещает doc.to_html >>> >>>>
puts <span style="background-color:#fff0f0;color:#D20">
>>       <span style="color:#710">"</span>
>>       <span style="">Hello, world!</span>
>>       <span style="color:#710">"</span>
>>       </span>
>>     
>> >>
...