如何匹配属于Blogspot中特定类别的项目

时间:2010-06-14 13:26:52

标签: ruby

在我的代码中,我有一个部分提取并列出了不同类别的帖子,但我的问题是如何准确获取属于该类别的帖子并仅列出它们。这是我的代码示例:

category = Array.new
docs.elements.each("*/entry/category")  { |element|
category << element.attributes['term']}
title = Array.new
docs.elements.each("*/entry/title")  do |element|
title << element.text
end

category.each_with_index {|category, index|
puts "  For Catergory :    #{category}
The title is : #{title[index]} "
 puts '---------------------------------------------------'

上述代码的输出如下,我希望将类别与其标题匹配。

对于Catergory:一个很好的开始

标题是:今天


Catergory:Circular

标题是:生活


Catergory:Circular

标题是:让我试试


对于Catergory:一个很好的开始

标题是:检查


对于Catergory:时间应该

标题是:测试


对于Catergory:时间应该

标题是:我已经成功了


Catergory:Circular

标题是:我已经成功了


Catergory:Circular

标题是:我


对于Catergory:一个很好的开始

标题是:一个值得注意的举动


对于Catergory:时间应该

标题是:


对于Catergory:一个很好的开始

标题是:欢迎注释


1 个答案:

答案 0 :(得分:0)

几乎不可能弄清楚你的代码是做什么的,因为它实际上并不起作用。显然,它会解析一些数据,但是你没有告诉我们它是如何解析数据的,数据是什么,你没有提供任何示例数据。此外,它似乎取决于一些库,但你不告诉我们这些库是什么。局部变量docs似乎是代码中最重要的东西,未定义。而不是向我们展示您想要的输出,您只向我们展示您想要的输出。

无论如何,据我所知,这似乎是你想要的:

require 'open-uri'
require 'nokogiri'

doc = Nokogiri.XML(open('http://googleblog.blogspot.com/atom.xml'))

puts doc.css('entry').reduce(Hash.new {|hsh, key| hsh[key] = [] }) {|cats, entry|
  cats.tap {|cats|
    entry.css('category').each {|cat|
      cats[cat['term']] << entry.css('title').text
    }
  }
}.reduce('') {|s, (cat, titles)|
  s.tap {|s|
    s << "  For Category :    #{cat}\n"
    s << titles.reduce('') {|s, title|
      s.tap {|s|
        s << "The title is : #{title}\n"
      }
    }
    s << "---------------------------------------------------\n"
  }
}

知道您实际上正在处理Atom提要也很高兴。如果我事先已经知道了,我就不必自己编写所有解析逻辑,我本可以使用Atom解析库。