Use Nokogiri para reemplazar las tags con ?

¿Cómo puedo usar nokogiri para reemplazar todas las tags img con tags de imagen? ¿Esto es para utilizar la capacidad de Rails para conectar el servidor de activos correcto automáticamente?

require 'nokogiri' class ToImageTag def self.convert Dir.glob("app/views/**/*").each do |filename| doc = Nokogiri::HTML(File.open(filename)) doc.xpath("//img").each |img_tags| # grab the src and all the attributes and move them to ERB end # rewrite the file end rescue => err puts "Exception: #{err}" end end 

Algo inspirado por la respuesta de maerics, he creado un script que hace esto. No tiene un problema con las entidades HTML porque solo usa la salida de nokogiri como una guía para el reemplazo. El reemplazo real se realiza utilizando String # gsub!

https://gist.github.com/1254319

Lo más cercano que puedo encontrar es el siguiente:

 # ...... Dir.glob("app/views/**/*").each do |filename| # Convert each "img" tag into a text node. doc = Nokogiri::HTML(File.open(filename)) doc.xpath("//img").each do |img| image_tag = "<%= image_tag('#{img['src']}') %>" img.replace(doc.create_text_node(image_tag)) end # Replace the new text nodes with ERB markup. s = doc.to_s.gsub(/(<%|%>)/) {|x| x=='<%' ? '<%' : '%>'} File.open(filename, "w") {|f| f.write(s)} end 

Esta solución causará esgulps en cualquier archivo que contenga las secuencias ” &lt% ” o ” %> ” (por ejemplo, si está describiendo la syntax ERB en HTML). El problema es que estás tratando de usar un analizador XML para reemplazar un nodo XML con texto que debe escaparse, así que no estoy seguro de que puedas hacerlo mucho mejor, a menos que haya algún ” raw_outer_xml=(str) oculto” “método.

La mejor apuesta general es escribir un analizador SAX personalizado que simplemente haga eco de los datos proporcionados a sus devoluciones de llamada (o los almacene en un búfer de cadena) a menos que sea un “start_element” con un “img”, en cuyo caso se escribirá la secuencia ERB.