2012-10-12 2 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

iterparse를 사용하고 직접 이벤트를 처리하거나 구문 분석하기 전에 원하는 접두어를 명시 적으로 선언하여 handle the namespace prefixes이 필요합니다. 당신이하려고하는 일에 따라 나는 XML을 파싱하기 전에 모든 접두어를 문자열로 대체하기 만하면되는 나의 lazier 순간을 인정할 것이다.

편집 : this similar question might help.

+1

이것은 의미가 없습니다. 네임 스페이스 접두사는 부모 태그에 정의되어 있습니다. 나는 내 RSS 파서를 미리 구문 분석 할 필요가 없어서 네임 스페이스를 RSS 파서에 스푼 피드 할 수있다. – Cerin

+0

나는 당신과 논쟁하지 않고있다. – Tom