Nokogiri如何获得不是图标的图像



我创建了这个方法,用于解析Wordpress XML中的图像。

 def get_image(doc, id)
    # Select all images in post
    images = Nokogiri::HTML(doc.xpath('//item')[id].xpath('content:encoded').text).xpath('//img')
    # Count number of images. 
    i = images.size
    if i == 0
      "No images found" 
    # We don't want icon images..
    elsif !images[0].attribute("src").to_s.scan("icon").empty?
      if i == 1
        "Only 1 picture that is icon - no image"
      else 
      t = 0
      #Loop all images and take the first that is not a smiley.
      loop do 
        t += 1
        images[t].attribute("src").to_s
        break if images[t].attribute("src").to_s.scan("icon").empty? || t > i
      end
      end 
    else
      images[0].attribute("src").to_s
    end
  end

这种方法的目的是获得一个不是图标(微笑)的图像。

它采用了arguments doc,它是一个Nokogiri XML提要项(博客文章)和引用项编号的ID。

如何在方法中创建循环?我希望它循环,直到它达到帖子(I)中的总图像,或者属性不包含"图标"。

受okliv启发的更新解决方案:

  def get_image(doc, id)
    images = Nokogiri::HTML(doc.xpath('//item')[id].xpath('content:encoded').text).xpath('//img')
    images_not_icons = images.collect{|image| image.attribute("src").to_s unless !image.attribute("src").to_s.scan("icon").empty?}.compact
    if images_not_icons.empty? || images_not_icons.nil?
      "no image"
    else
      images_not_icons.first
    end
  end

一开始,您有一个images中所有图像的数组,对吗?

然后只收集不这样的图标:

images_not_icons = images.select{|image| image.attribute("src").to_s.scan("icon").empty?}

然后循环它们:

images_not_icons.each do |image|
  image.do_something
end

或者,如果我正确理解您只需要src URL,那么它就更容易了:

images_not_icons.collect{|image| image.attribute("src").to_s}

你甚至可以把它放在一排:

urls_of_images_not_icons = images.collect{|image| image.attribute("src").to_s unless image.attribute("src").to_s.scan("icon").empty?}.compact

相关内容

  • 没有找到相关文章

最新更新