使用引入nokogiri与更换标签?

我如何使用与引入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输出作为更换的导向。 而实际的替换是使用字符串#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 |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(/(&lt;%|%&gt;)/) {|x| x=='&lt;%' ? '<%' : '%>'}
File.open(filename, "w") {|f| f.write(s)}
end

该解决方案将肆虐对包含有序列“的任何文件&lt%或“ %&gt; (例如,如果你描述HTML ERB语法)。 问题是,你要使用XML解析器来替换文本的XML节点必须转 ​​义,所以我不知道你能做到比这更好,除非有一些隐藏的“ raw_outer_xml=(str) “法。

你最佳的整体办法是编写一个自定义的SAX解析器它只是呼应(字符串中的缓冲区或存储它)给你的回调,除非它是一个“START_ELEMENT”与“IMG”的数据,在这种情况下,它会写雇员再培训局序列。

分类:Ruby on Rails的 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.890 (s). 10 q(s)