Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 使用nokogiri和ruby on rails更改href属性_Html_Ruby On Rails_Parsing_String_Nokogiri - Fatal编程技术网

Html 使用nokogiri和ruby on rails更改href属性

Html 使用nokogiri和ruby on rails更改href属性,html,ruby-on-rails,parsing,string,nokogiri,Html,Ruby On Rails,Parsing,String,Nokogiri,我有一个带有链接的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>&

我有一个带有链接的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>


实现这一目标的最佳策略是什么?

如果您选择使用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

您是在rails模板(即.html.erb)中动态构建html页面,还是已经构建了html页面,并且您希望在构建之后重新扫描(使用Nokogiri等)?文档已经构建。工作起来很有魅力!谢谢jdeseno
link['href']
link.attributes[“href”]的快捷方式。value
如果要将更改后的值输出到变量,该怎么办?