Изменение атрибутов href с помощью nokogiri и ruby on rails
У меня есть HTML-документ со ссылками на ссылки, например:
<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>
какова лучшая стратегия для достижения этого?
2 ответов
Если вы решите использовать 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'))
Если я не ошибаюсь, rails загружает REXML по умолчанию, в зависимости от того, что вы пытаетесь сделать, вы также можете использовать это.
вот что я сделал для замены атрибутов 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