как сопоставить элементы, принадлежащие к определенной категории в Blogspot - PullRequest
0 голосов
/ 14 июня 2010

В моем коде есть раздел, который извлекает и перечисляет различные категории сообщений, но моя проблема в том, как получить именно те сообщения, которые попадают в эту категорию, и перечислить их только. Это пример моего кода:

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 голосов
/ 14 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...