2009-11-10 3 views
50

Как удалить <img> теги, используя Nokogiri?Как удалить узел с помощью 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 
+0

Вы можете оставить значение выборки для 'str'? –

+1

str = ' testt test tfbu' – Aljaz

+0

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

ответ

67

попробовать!

f = Nokogiri::XML.fragment(str) 

f.search('.//img').remove 
puts f 
9

Я предпочитаю 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" 
Смежные вопросы