2012-10-12 35 views
6

पाइथन में एलिमेंटट्री का उपयोग करके आप XML में नेमस्पेस-विशिष्ट टैग कैसे खोजते हैं?पाइथन में एलिमेंट्री के साथ आरएसएस को पार्स करना

मैं एक XML/आरएसएस दस्तावेज़ की तरह:

<?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, या तो इटरपेर्स का उपयोग करके और सीधे ईवेंट को संभालने या पार्सिंग से पहले रुचि रखने वाले उपसर्गों को स्पष्ट रूप से घोषित करके आपको handle the namespace prefixes की आवश्यकता है। आप जो करने की कोशिश कर रहे हैं उसके आधार पर, मैं अपने आलसी क्षणों में प्रवेश करूंगा, मैं एक्सएमएल को पार्स करने से पहले स्ट्रिंग के साथ सभी उपसर्गों को बस हटा देता हूं।

संपादित करें: this similar question might help.

+1

इसका कोई मतलब नहीं है। नामस्थान उपसर्गों को पैरेंट टैग में परिभाषित किया गया है। मुझे अपने आरएसएस दस्तावेज़ को पूर्व-विश्लेषण नहीं करना चाहिए, इसलिए मैं अपने आरएसएस पार्सर को नामस्थानों को चम्मच-खिला सकता हूं ... – Cerin

+0

मैं आपसे बहस नहीं कर रहा हूं, मैं बस इतना कह रहा हूं कि मैं इसके आसपास कैसे आया। – Tom