2010-04-22 17 views
13

Tengo un documento HTML con enlaces enlaces, por exemple:Cambio de atributos href con nokogiri y el rubí en los carriles

<html> 
    <body> 
    <ul> 
    <li><a href="http://someurl.com/etc/etc">teste1</a></li> 
    <li><a href="http://someurl.com/etc/etc">teste2</a></li> 
    <li><a href="http://someurl.com/etc/etc">teste3</a></li> 
    <ul> 
    </body> 
</html> 

quiero con Ruby on Rails, con nokogiri o algún otro método, para tener un documento definitivo de esta manera:

<html> 
    <body> 
    <ul> 
     <li><a href="http://myproxy.com/?url=http://someurl.com/etc/etc">teste1</a></li> 
     <li><a href="http://myproxy.com/?url=http://someurl.com/etc/etc">teste2</a></li> 
     <li><a href="http://myproxy.com/?url=http://someurl.com/etc/etc">teste3</a></li> 
    <ul> 
    </body> 
</html> 

¿Cuál es la mejor estrategia para lograr esto?

+0

¿Estás dinámicamente la construcción de la página HTML en una plantilla de carriles (es decir .html.erb) o ha ya se han construido y que desea volver -canzar (utilizando Nokogiri, etc.) después del hecho? –

+0

El documento ya está construido. –

Respuesta

25

Si usted elige utilizar Nokogiri, creo que esto debería funcionar:

require 'cgi' 
require 'rubygems' rescue nil 
require 'nokogiri' 

file_path = "your_page.html" 
doc = Nokogiri::HTML(open(file_path)) 
doc.css("a").each do |link| 
    link.attributes["href"].value = "http://myproxy.com/?url=#{CGI.escape link.attributes["href"].value}" 
end 
doc.write_to(open(file_path, 'w')) 

Si no estoy carriles equivocados cargas REXML por defecto, dependiendo de lo que estamos tratando de hacer que usted podría utilizar este además.

+0

¡Funciona como un encanto! Gracias jdeseno! –

+2

'link ['href']' es un atajo para 'link.attributes [" href "]. Value' – aidan

+0

¿Qué ocurre si quiero mostrar el cambio en una variable? – nXqd

0

Aquí es lo que hice para la sustitución de imágenes src atributos:

 doc = Nokogiri::HTML(html) 
     doc.xpath("//img").each do |img| 
     img.attributes["src"].value = Absolute_asset_path(img.attributes["src"].value) 
     end 
     doc.to_html     // simply use .to_html to re-convert to html 
Cuestiones relacionadas