python feedparser自定义命名空间

时间:2014-02-14 15:58:33

标签: python xml atom-feed feedparser

我尝试解析一些原子进给。 E.g。

>>> 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 个答案:

答案 0 :(得分:1)

来自rfc4287

  

o atom:entry元素必须只包含一个atom:title元素。

没有提及name元素作为entry的子元素。

第6.3节说

  

当作为孩子遇到未知的外国标记时   atom:entry,atom:feed或Person构造,Atom Processors MAY   绕过标记和任何文本内容,绝不能改变它们   由于标记的存在而导致的行为。

FeedParser是一种通用解析器,可与许多不同类型的Feed一起使用,因此,可能不支持各种细微内容或更高级的使用。特别是,它不支持此功能(快速浏览源代码似乎可以验证这一点)。

换句话说,您需要修改FeedParser,找到其他ATOM解析器(我不知道任何),或者自己写一些东西......

相关问题