2014-02-14 6 views
0

Я пытаюсь разобрать некоторую подачу атома. Например.python feedparser custom namespaces

>>> feedparser.parse(""" 
    <?xml version="1.0" encoding="utf-8"?> 
    <feed xmlns:a="http://example.com"> 
     <entry> 
     <a:name>123</a:name> 
     <a:name xml:lang="es"></a:name> 
     </entry> 
    </feed> 
""").entries[0] 

{u'a_name': {'xml:lang': u'es'}} 

Я хочу, чтобы вместо того, чтобы получить что-то вроде этого:

{u'a_name': '123'} 

или

{u'a_name': ['123', '']} 

диковинки вещь, что если вы измените name на title - feedparser работает отлично.

Но мне нужно разобрать пользовательские теги из других пространств имен.

ответ

1

rfc4287 От:

о атоме: элементы записи должны содержать ровно один атом: название элемента.

В качестве дочернего элемента entry не упоминается элемент name.

Раздел 6.3 говорит

Когда неизвестная внешняя разметка встречаются как ребенок атома: вход, атом: корм, или личностно конструкция, Atom процессоры могут обводной разметки и любое текстовое содержание и MUST НЕ меняйте их поведение в результате присутствия разметки.

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

Другими словами, вам нужно будет либо изменить FeedParser, найти другой парсер ATOM (я не знаю никого), либо написать что-нибудь самостоятельно ...

Смежные вопросы