python - 在 Python 中使用 Elementtree 解析 RSS

标签 python xml rss elementtree

如何使用 Python 中的 Elementtree 在 XML 中搜索特定于命名空间的标签?

我有一个 XML/RSS 文档,例如:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wp="http://wordpress.org/export/1.0/"
>
<channel>
    <title>sometitle</title>
    <pubDate>Tue, 28 Aug 2012 22:36:02 +0000</pubDate>
    <generator>http://wordpress.org/?v=2.5.1</generator>
    <language>en</language>
    <wp:wxr_version>1.0</wp:wxr_version>
    <wp:category><wp:category_nicename>apache</wp:category_nicename><wp:category_parent></wp:category_parent><wp:cat_name><![CDATA[Apache]]></wp:cat_name></wp:category>
</channel>
</rss>

但是当我尝试通过以下操作找到所有“wp:category”标签时:

import xml.etree.ElementTree as xml
tree = xml.parse(fn)
doc = tree.getroot()
categories = doc.findall('channel/wp:category')

我得到错误:

SyntaxError: prefix 'wp' not found in prefix map

搜索任何非 namespace 特定的字段都可以正常工作。我做错了什么?

最佳答案

您需要handle the namespace prefixes ,通过使用 iterparse 并直接处理事件,或者通过在解析之前显式声明您感兴趣的前缀。根据您尝试执行的操作,我会承认在我比较懒的时候,我只是在解析 XML 之前用字符串替换去除所有前缀。

编辑:this similar question might help.

关于python - 在 Python 中使用 Elementtree 解析 RSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861752/

相关文章:

c# - 如果 XDocument 对象中不存在属性,如何设置默认值

xml - XPATH:查找所有具有相同值的元素,直到值发生变化

java - 具有基本身份验证功能的 Apache Camel RSS 模块

python - 如何在已放置的 QLabel 或 QPixmap 之上使用 QPainter 进行绘制?

python - AzureML 架构 "list index out of range"错误

c# - 如何使用XmlDocument在xml中添加处理指令

c# - System.Xml.XmlException - 根元素丢失

.net - 用于 .NET 的 RSS 解析器

python - 使用 python {census} 计算每个州的县数

python - 如何在系列上应用功能