2010-06-14 5 views
0

Dans mon code, j'ai une section qui extrait et répertorie les différentes catégories de messages, mais mon problème est de savoir comment obtenir exactement les messages qui entrent dans cette catégorie et les lister seulement . Ceci est un exemple de mon code:comment faire correspondre les articles appartenant à une catégorie particulière dans Blogspot

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 '---------------------------------------------------' 

La sortie du code ci-dessus est la suivante et je voudrais correspondre comme catégories avec leurs titres.

Pour catergory: Un bon Begining

Le titre est: Aujourd'hui


Pour catergory: Circulaire

Le titre est: La vie


Pour catergory: Circulaire

Le titre est: Permettez-moi


Pour catergory: Un bon Begining

Le titre est: Vérifiez


Pour catergory: temps Les temps

Le titre est: Essai


Pour catergory: le temps doit chronométrer

Le titre est: Je l'ai fait


Pour catergory: Circulaire

Le titre est: Je l'ai fait


Pour Catergory: Circulaire

Le t itre est: Me


Pour catergory: Un bon Begining

Le titre est: un mouvement remarquable


Pour catergory: temps Les temps

Le titre est:


Pour catergory: Un bon Begining

Le titre est: Une note de bienvenue


Répondre

0

Il est à peu près impossible de savoir ce que votre code, car il ne fonctionne pas vraiment. Apparemment, il analyse certaines données, mais vous ne nous dites pas comment il analyse ces données, quelles sont ces données et vous ne fournissez aucun exemple de données. En outre, il semble que cela dépend de certaines bibliothèques, mais vous ne nous dites pas quelles sont ces bibliothèques. La variable locale docs qui semble être la chose la plus importante dans votre code, n'est pas définie.Et au lieu de nous montrer ce que la sortie est ce que vous voulez, vous nous montrez seulement ce que la sortie est ne veulent pas.

Quoi qu'il en soit, pour autant que je suis en mesure de comprendre, cela semble être ce que vous voulez:

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" 
    } 
} 

Il aurait aussi été agréable de savoir que vous traitez en fait un flux Atom. Si j'avais su cela auparavant, je n'aurais pas eu à écrire moi-même toute cette logique d'analyse, j'aurais pu utiliser une bibliothèque d'analyse Atom.

+0

Parfois, la frustration peut faire que l'on fasse ce qu'on ne peut pas obtenir. Je suis désolé d'avoir commis une telle erreur dans ma question mais, grâce à Dieu, vous avez réalisé ce dont je parlais. Le 'docs' est le corps d'une réponse que j'ai reçu d'un appel net/http. Je voulais faire correspondre les éléments de la racine du document REXML 'doc' qui comprend Post_Id, Catégorie, Contenu de la poste, Auteur, Date de publication. donc le code ci-dessus est tiré de mon code principal. – Godwin

Questions connexes