2010-07-08 66 views
2

這是previous question的延續。我在使用此Nokogiri片段時遇到了問題:這個Nokogiri命令爲什麼去掉HTML標籤?

>> require 'nokogiri' 
>> html = 'bad<p>markup</p>with<img src="foo.jpg">' 
>> Nokogiri::HTML(html).at_css('body').children.map {|x| '<p>' + x.text + '</p>'}.join('') 
=> "<p>bad</p><p>markup</p><p>with</p><p></p>" 

我的圖片標籤發生了什麼變化?看起來,Nokogiri可能會剝離所有存在的HTML標籤(包括我的原始<p>圍繞單詞「標記」),並將其替換。我如何防止這種情況發生?所有我想要做的就是確保完全無標記的文本被包裹在一個<p>標籤...

回答

2

只有包裝在p標籤的元素,如果它是一個文本節點,否則調用to_html它:

require 'nokogiri' 

html = 'bad<p>markup</p>with<img src="foo.jpg">' 

Nokogiri::HTML(html).at_css('body'). 
children.map do |x| 
    if x.text? 
    '<p>' + x.text + '</p>' 
    else 
    x.to_html 
    end 
end.join('') 
#=> "<p>bad</p>\n<p>markup</p><p>with</p><img src=\"foo.jpg\">" 
+0

啊,好吧,這是有道理的。謝謝! :) – 2010-07-08 16:20:19