Как мне удалить узел с Nokogiri? - PullRequest
54 голосов
/ 10 ноября 2009

Как я могу удалить <img> метки с помощью Nokogiri?

У меня есть следующий код, но он не будет работать:

# str = '<img src="canadascapital.gc.ca/data/2/rec_imgs/5005_Pepsi_H1NB.gif"/…; testt<a href="#">test</a>tfbu' 

f = Nokogiri::XML.fragment(str)
f.search('//img').each do |node| 
  node.remove
end
puts f

Ответы [ 2 ]

73 голосов
/ 12 ноября 2009

попробуйте!

f = Nokogiri::XML.fragment(str)

f.search('.//img').remove
puts f
10 голосов
/ 29 сентября 2013

Я предпочитаю CSS, а не XPath, так как обычно он более читабелен. Переключение на CSS:

require 'nokogiri'

doc = Nokogiri::HTML('<html><body><img src="foo"><img src="bar"></body></html>')

После разбора документ выглядит так:

doc.to_html
# => "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n<img src=\"foo\"><img src=\"bar\">\n</body></html>\n"

Удаление тегов <img>:

doc.search('img').each do |src|
  src.remove
end

Результаты:

doc.to_html
# => "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body></body></html>\n"
...