2012-10-12 16 views
6

Jak wyszukiwać znaczniki specyficzne dla przestrzeni nazw w XML za pomocą Elementtree w Pythonie?Parsowanie RSS z Elementtree w Pythonie

Mam dokument XML/RSS jak:

<?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> 

Ale gdy próbuję i znaleźć wszystkie "WP: kategoria" tagi, wykonując:

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

pojawia się błąd:

SyntaxError: prefix 'wp' not found in prefix map 

Wyszukiwanie dowolnych pól niezwiązanych z przestrzenią nazw działa dobrze. Co ja robię źle?

Odpowiedz

1

Musisz handle the namespace prefixes, używając Iterparse i obsługi zdarzenia bezpośrednio lub jawnie deklarując przed rozpoczęciem analizowania prefiksy, które Cię interesują. Zależnie od tego, co próbujesz zrobić, przyznaję, że w krótszych chwilach po prostu rozszyfrowuję wszystkie prefiksy przed zamianą kodu XML.

EDYTOWANIE: this similar question might help.

+1

To nie ma sensu. Przedrostki przestrzeni nazw są zdefiniowane w tagu nadrzędnym . Nie musiałbym wstępnego parsowania mojego dokumentu RSS, żeby móc przesłać paszę przestrzeni nazw do mojego parsera RSS ... – Cerin

+0

Nie kłócę się z tobą, po prostu mówię, że tak to obejdzie. – Tom

Powiązane problemy