2010-04-22 72 views
13

我有鏈接鏈接HTML文檔的href屬性,爲例:改變與引入nokogiri和Ruby on Rails

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

我想用Ruby on Rails的,與引入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),或者有它已經建成並要重新 - 事實之後呢(使用Nokogiri等)? – 2010-04-23 15:57:27

+0

該文件已經建成。 – 2010-04-23 16:15:20

回答

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! – 2010-04-23 18:37:50

+2

'link ['href']'是link.attributes [「href」]。的值的快捷方式'' – aidan 2013-08-02 01:46:34

+0

如果我想輸出更改爲變量,該怎麼辦? – nXqd 2014-03-01 18:37:09

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