Python feedparser не использует пространство имен atom/WordPress?

Я пытаюсь использовать feedparser (отличная библиотека) для разбора экспортных файлов WordPress и (незначительное) несоответствие между Версия WordPress вызывает у меня огромную головную боль.

WordPress 2.x не включает теги atom:link в вывод XML (without_atom_tags.xml ). При синтаксическом анализе элементы пространства имен доступны без префикса:

>>> feed = feedparser.parse("without_atom_tags.xml")
>>> print feed.entries[0].comment_status
u'open'

XML из WordPress 3.x содержит atom:link тега (with_atom_tags.xml), и вы должны префиксировать элементы пространства имен:

>>> feed = feedparser.parse("with_atom_tags.xml")
>>> feed.entries[0].wp_comment_status              # <-- Note wp_ prefix
u'open'
>>> feed.entries[0].comment_status
AttributeError: object has no attribute 'comment_status'

Интересно, что префиксы не нужны, если я добавляю xmlns:atom="http://www.w3.org/2005/Atom" к корневому элементу RSS (with_atom_tags_and_namespace.xml).

Мне нужно разобрать все эти разные форматы без изменения XML. Feedparser сломался или я что-то не так делаю? Могу ли я сделать это без кучи неприятного условного кода?


person Kyle Fox    schedule 14.07.2010    source источник
comment
Обновление: оказалось, что при использовании основной версии feedparser все элементы обрабатываются одинаково (с префиксом wp_).   -  person Kyle Fox    schedule 15.07.2010


Ответы (1)


Не могли бы вы напрямую добавить отсутствующие пространства имен (atom/wp) в глобальный список поддерживаемых пространств имен в файле feedparser.py?

person Colin Humber    schedule 14.07.2010
comment
Я скачал исходный код feedparser.py, чтобы попробовать ваше решение. О чудо, последняя версия из транка исправляет эту проблему! Все атрибуты имеют префикс пространства имен wp_ - person Kyle Fox; 15.07.2010