【问题标题】:Python feedparser not using atom/WordPress namespace?Python feedparser 不使用 atom/WordPress 命名空间?
【发布时间】:2010-07-14 19:37:09
【问题描述】:

我正在尝试使用feedparser(一个优秀的库)来解析 WordPress 导出文件,而 WordPress 版本之间的(轻微)不一致让我非常头疼。

WordPress 2.x 在 XML 输出 (without_atom_tags.xml) 中不包含 atom:link 标签。解析时,命名空间元素在没有前缀的情况下可用:

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

来自 WordPress 3.x 的 XML 确实包含 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 坏了,还是我做错了?我可以在没有一堆讨厌的条件代码的情况下做到这一点吗?

【问题讨论】:

  • 更新: 结果表明,使用主干版本的 feedparser 会导致所有元素的解析方式相同(带有 wp_ 前缀)。

标签: python xml wordpress feedparser atom-feed


【解决方案1】:

能否将缺少的命名空间(atom/wp)直接添加到 feedparser.py 中支持的命名空间的全局列表中?

【讨论】:

  • 我下载了 feedparser.py 源代码以尝试您的解决方案。瞧,trunk 的最新版本纠正了这个问题!所有属性都以命名空间 wp_ 为前缀
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
相关资源
最近更新 更多