2010-07-14 4 views
1

J'essaye d'employer feedparser (une excellente bibliothèque) pour analyser des dossiers d'exportation de WordPress, et une incohérence (mineure) entre la version de WordPress me cause un mal de tête énorme. WordPress 2.x n'inclut pas de balises atom:link dans la sortie XML (without_atom_tags.xml). Si on analyse, éléments namespaced sont disponibles sans le préfixe:Feedparser Python n'utilisant pas l'espace de noms atom/WordPress?

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

Le XML de WordPress 3.x ne contiennentatom:link balises (with_atom_tags.xml), et vous devez ajouter un préfixe d'espace de noms des éléments:

>>> 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' 

Fait intéressant , les préfixes ne sont pas nécessaires si j'ajoute xmlns:atom="http://www.w3.org/2005/Atom" à l'élément RSS racine (with_atom_tags_and_namespace.xml).

J'ai besoin d'analyser tous ces différents formats sans modifier le XML. Feedparser est cassé, ou est-ce que je le fais mal? Puis-je faire cela sans un tas de code conditionnel?

+0

* Mise à jour: * Il s'avère que l'utilisation de la version réseau de feedparser entraîne la même analyse de tous les éléments (* avec * le préfixe wp_). –

Répondre

0

Pourriez-vous ajouter les espaces de noms manquants (atom/wp) à la liste globale des espaces de noms pris en charge dans feedparser.py directement?

+0

J'ai téléchargé la source feedparser.py afin d'essayer votre solution. Lo et voici, la dernière version de tronc corrige ce problème! Tous les attributs sont préfixés avec l'espace de noms wp_ –

Questions connexes