Невозможно понять, что делает ваш код, потому что он на самом деле не работает.Очевидно, он анализирует некоторые данные, но вы не сообщаете нам, как он анализирует эти данные, что это за данные, и вы не предоставляете никаких примеров данных.Кроме того, кажется, что это зависит от некоторых библиотек, но вы не говорите нам, что это за библиотеки.Локальная переменная 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.