2010-04-22 8 views
13

मैं लिंक लिंक के साथ एक HTML दस्तावेज़ है पर गहरे लाल रंग का साथ href गुण बदल रहा है, उदाहरण के लिए:nokogiri और रेल

<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> 

मैं रूबी ऑन रेल्स के साथ चाहते हैं, nokogiri या किसी अन्य विधि के साथ, एक अंतिम दस्तावेज़ के लिए इस तरह:

<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> 

इसे प्राप्त करने के लिए सबसे अच्छी रणनीति क्या है?

+0

आप गतिशील रूप से एक रेल टेम्पलेट में html पृष्ठ के निर्माण (यानी .html.erb) या यह पहले से ही बनाया गया है कर रहे हैं और आप फिर से करना चाहते हैं तथ्य के बाद (इसे नोकोगिरी आदि का उपयोग कर)? –

+0

दस्तावेज़ पहले से ही बनाया गया है। –

उत्तर

25

आप Nokogiri उपयोग करने के लिए चुनते हैं, तो मुझे लगता है कि यह काम करना चाहिए:

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')) 

अगर मैं नहीं गलत रेल भार, डिफ़ॉल्ट रूप से अप REXML आप आप इस इस्तेमाल कर सकते हैं करने के लिए कोशिश कर रहे हैं, उसके आधार पर कर रहा हूँ भी।

+0

एक आकर्षण की तरह काम करता है! धन्यवाद jdeseno! –

+2

'लिंक ['href']' link.attributes ["href"] के लिए शॉर्टकट है। मूल्य ' – aidan

+0

क्या होगा यदि मैं एक चर में बदलना आउटपुट करना चाहता हूं? – nXqd

0

यहाँ मैं छवियों src की जगह के लिए किया था विशेषताओं है:

 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 
संबंधित मुद्दे