如何解决使用Nokogiri将<img src />标记替换为<%= image_tag%>?
| 如何使用nokogiri将所有img标签替换为图片标签?这是利用Rails的能力自动插入正确的资产服务器吗?require \'nokogiri\'
class ToImageTag
def self.convert
Dir.glob(\"app/views/**/*\").each do |filename|
doc = Nokogiri::HTML(File.open(filename))
doc.xpath(\"//img\").each |img_tags|
# grab the src and all the attributes and move them to ERB
end
# rewrite the file
end
rescue => err
puts \"Exception: #{err}\"
end
end
解决方法
受maerics的响应启发,我创建了一个脚本来执行此操作。 HTML实体没有问题,因为它仅使用nokogiri输出作为替换指南。实际的替换是通过使用String#gsub完成的!
https://gist.github.com/1254319
, 我能想到的最接近的如下:
# ......
Dir.glob(\"app/views/**/*\").each do |filename|
# Convert each \"img\" tag into a text node.
doc = Nokogiri::HTML(File.open(filename))
doc.xpath(\"//img\").each do |img|
image_tag = \"<%= image_tag(\'#{img[\'src\']}\') %>\"
img.replace(doc.create_text_node(image_tag))
end
# Replace the new text nodes with ERB markup.
s = doc.to_s.gsub(/(<%|%>)/) {|x| x==\'<%\' ? \'<%\' : \'%>\'}
File.open(filename,\"w\") {|f| f.write(s)}
end
该解决方案将对包含序列“<%
\”或“%>
\”的任何文件造成严重破坏(例如,如果您使用HTML描述ERB语法)。问题是您正在尝试使用XML解析器将XML节点替换为必须转义的文本,因此,我不确定您可以做得更好,除非存在一些隐藏的“ 4”。 “ 方法。
最好的总体选择是编写一个自定义的SAX解析器,该解析器将仅回显提供给回调的数据(或将其存储在字符串缓冲区中),除非它是带有\“ img \”的\“ start_element \”,在这种情况下,它将写入ERB序列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。