0

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

私の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問題は、私が与えた場合に私のanを返す関数をすでに実行したことですがHpricot::Element、Hpricotドキュメントで元のノードを私の文字列に置き換える方法がわかりません。

4

1 に答える 1

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 + ') %>')
}
于 2010-07-09T10:57:18.517 に答える