2012-10-12 12 views
6

PythonでElementtreeを使用してXMLで名前空間固有のタグを検索するにはどうすればよいですか?PythonでElementtreeでRSSを解析する

私が持っている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カテゴリ" のタグ:

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 

名前空間以外の特定のフィールドを検索しても問題ありません。私は間違って何をしていますか?

答えて

1

handle the namespace prefixesを使用するには、iterparseを使用してイベントを直接処理するか、または解析する前に明示的にプレフィックスを宣言する必要があります。あなたがやろうとしていることに応じて、私は自分の怠慢な瞬間に、XMLを解析する前にすべての接頭辞を文字列置換で取り除くだけです。

編集:this similar question might help.

+1

これは意味をなさない。名前空間接頭辞は、親のタグで定義されています。私は私のRSSパーサに名前空間をスプーンフィードできるので、私のRSS文書をあらかじめ解析する必要はありません。 – Cerin

+0

私はあなたと議論しているわけではありません。 – Tom

関連する問題