在我的代码中,我有一个部分提取并列出了不同类别的帖子,但我的问题是如何准确获取属于该类别的帖子并仅列出它们。这是我的代码示例:
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:一个很好的开始
标题是:欢迎注释
答案 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解析库。