这是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>
标记中......
答案 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\">"