7

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

名前空間に固有でないフィールドの検索は問題なく機能します。私は何を間違っていますか?

4

1 に答える 1

3

iterparseを使用してイベントを直接処理するか、解析する前に目的のプレフィックスを明示的に宣言することにより、名前空間プレフィックスを処理する必要があります。あなたがやろうとしていることに応じて、私は私の怠惰な瞬間に、XMLを解析する前にすべてのプレフィックスを文字列置換で削除することを認めます。

編集:この同様の質問が役立つかもしれません。

于 2012-10-12T15:01:59.630 に答える