Разбор RSS-элемента с двоеточием в теге с Ruby?

Я пытаюсь проанализировать информацию из RSS-канала, который имеет эту структуру тегов:

<dc:subject>foo bar</dc:subject>

использование встроенной библиотеки Ruby RSS. Очевидно, делая item.dc:subject бросает ошибки, но я не могу понять, как вытащить эту информацию. Есть ли способ заставить это работать? Или это возможно с другой библиотекой RSS?

3 ответов


теги с': 'в них действительно XML-теги с пространством имен. У меня никогда не было хороших результатов с помощью модуля RSS, потому что форматы каналов часто не соответствуют спецификациям, заставляя модуль сдаваться. Я настоятельно рекомендую использовать Nokogiri для анализа фида, будь то RDF, RSS или ATOM.

Nokogiri имеет возможность использовать XPath accessors или CSS accessors, и оба поддерживают пространства имен. Последние две строки будут эквивалентны:

require 'nokogiri'
require 'open-uri'
doc = Nokogiri::XML(open('http://somehost.com/rss_feed'))
doc.at('//dc:subject').text
doc.at('dc|subject').text

при работе с пространствами имен вам нужно будет добавить объявление в метод доступа XPath:

doc.at('//dc:subject', 'dc' => 'link to dc declaration') 

см. раздел "пространства имен" для получения дополнительной информации.

без URL или лучшего образца я не могу сделать больше, но это должно заставить вас указать в лучшем направлении.

пару лет я написал большой агрегатор RSS для своей работы, используя Nokogiri, который обрабатывал RDF, RSS и ATOM. Библиотека Руби РСС не задача, но nokogiri По был потрясающим.

Если вы не хотите ролл твой собственный,Feedzirra пола Дикса хороший камень для обработки.


на RSS-канал модуль, похоже, имеет возможность делать эти атрибуты пространства имен XML, т. е. <dc:date> такой:

feed.items.each do |item| puts "Date: #{item.dc_date}" end


Я думаю item['dc:subject'] может работать.