为什么这个Nokogiri命令剥离出HTML标签?

时间:2010-07-08 15:44:37

标签: ruby nokogiri

这是previous question的延续。我对这个Nokogiri片段有问题:

>> 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>标记中......

1 个答案:

答案 0 :(得分:3)

如果元素是文本节点,则仅将该元素包装在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\">"