如何用ruby字符串替换节点?

时间:2010-07-09 10:03:44

标签: ruby hpricot

我正在尝试用<img> rails标记替换HTML文件中的所有<%= image_tag() %>标记。

我想做的是:

doc = open("myfile.html") { |f| Hpricot(f) }
imgs = doc.search("//img") # here i got all Hpricot::Elements

imgs.each { |i|
  # fake function name !
  i.replace_by_HTML('<%= image_tag("/images/blabla.jpg") %>')
}

我需要的是一个函数,它将用我将传递的字符串替换文件中的节点。

< img src="/images/blalba.jpg" /> would give => <%= image_tag("/images/blabla.jpg") %>

更新

我真的不想使用正则表达式,这就是为什么我选择Hpricot,因为它会为我解析HTML然后我可以Element.attributes生成具有所有属性的image_tag包括在内。

如果我的img标签如下:

< img style="float:left;" src="images/blabla.jpg" width="30" height="30" ... />

< img src=\"images/blabla.jpg\" style=\"float:left;\" width=\"30\" height=\"30\" ... />

明白我的意思?我可以解析一个包含转义斜杠的.SQL文件,src属性可能在另一个属性之后等等......

问题是,如果我给image_tag,我已经完成了将返回Hpricot::Element的函数,但我不知道如何用Hpricot doc中的字符串替换原始节点

1 个答案:

答案 0 :(得分:0)

您可以使用gsub字符串方法和常规表达式执行此操作

doc = open("myfile.html") { |f| 
  f.read().gsub(/<img src="([^"]*)".*\/>/, '<%= image_tag("\1") %>') 
}

我没有安装hpricot,但似乎(检查此hpricot-altering)你可以在搜索的元素上使用swap方法

imgs.each { |i|
  i.swap('<%= image_tag(' + i.src + ') %>')
}