首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nokogiri替换

nokogiri替换
EN

Stack Overflow用户
提问于 2011-01-17 18:46:30
回答 2查看 1.9K关注 0票数 2

我正在解析一个HTML文档,并尝试替换图像src。当我在控制台中尝试它时,它似乎做了我想做的事情,但是在我的模型中,它似乎没有保存它。现在,我不确定我所做的是不是在Rails中保存的方式有问题(我正在尝试更新内容字段并用本地图像替换外部图像),或者它是否使用了nokogiri,但是它没有使用set_attribute方法保存结果

它完美地完成了剩下的部分。

代码语言:javascript
复制
  before_save :replace_zemanta_images

  def replace_zemanta_images
    doc = Nokogiri::HTML(content)
    unless doc.css('div.zemanta-img').blank?
      doc.css('div.zemanta-img img').each do |img|
        io = open(URI.parse(img[:src]))
        if photos.find_by_data_remote_url(img[:src]).blank?
          photo = photos.build(:data => io, :data_remote_url => img[:src])
          img.set_attribute('src', photo.data.url(:original)) #doesn't work!
        end
      end
    end
  end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-17 19:10:57

我假设content是模型上的一个属性。

当您执行img.set_attribute时,您正在更新Nokogiri::XML::Element对象中的属性,但这不会更新content的文本。

在您的方法的末尾,您将需要添加类似以下内容:

代码语言:javascript
复制
self.content = doc.to_s
票数 3
EN

Stack Overflow用户

发布于 2016-09-28 05:13:26

JackChance在这里提到过在片段中使用Nokogiri::HTTP::DocumentFragment.parse(content) (如果你不想要DOCTYPE/ HTML /BODY标记),我没有那么幸运,因为我最初的HTML是一个片段,而不是整个文档。

我最终使用了类似这样的东西:html = Nokogiri::HTML.fragment最初将HTML string代码段转换为不带不必要标记的Nokogiri对象。

然后,一旦我们使用了img.set_attribute,我们就可以转换回html.to_s

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4712278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档