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

发布于 2024-09-09 03:09:24 字数 1153 浏览 6 评论 0原文

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

我想做的是这样的:

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< /code> 包含所有属性。

如果我的 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 文档中的字符串替换原始节点。

I'm trying to replace all my <img> tags in an HTML file by <%= image_tag() %> rails tag.

What I want to do is something like:

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") %>')
}

What I need it a function that will replace the node in the file by a string I would pass.

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

Update:

I don't really want to use regular expressions, thats why I choosed Hpricot, because it will parse the HTML for me and then I can do Element.attributes and generate my image_tag with all the attributes included.

What if my img tags are like:

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

or

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

See what I mean? I may parse a .SQL file containing escaping slashes, the src attribute could be after another attribute, etc ...

The thing is I already did the function that will return my an image_tag if i give an Hpricot::Element, but I don't know how to replace the original node by my string in the Hpricot doc.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请持续率性 2024-09-16 03:09:24

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

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

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

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

You can do this with gsub string method and regular expresions

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

I don't have hpricot installed but it seems (check this hpricot-altering) that you coud use swap method on searched elements

imgs.each { |i|
  i.swap('<%= image_tag(' + i.src + ') %>')
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文