2010-07-14 2 views
1

Я пытаюсь использовать feedparser (отличная библиотека) для анализа файлов экспорта WordPress, а (незначительная) несогласованность между версией WordPress вызывает у меня огромную головную боль.Python feedparser не использует пространство имен Atom/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 сломанным, или я делаю это неправильно? Могу ли я сделать это без кучи неприятного условного кода?

+0

* Обновление: * Выключается с использованием версии trunk feedparser, заставляет все элементы разбираться одинаково (* с * префиксом wp_). –

ответ

0

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

+0

Я загрузил источник feedparser.py в попытке попробовать ваше решение. Ло и вот, последняя версия с багажника исправляет эту проблему! Все атрибуты имеют префикс пространства имен wp_ –