2010-09-03 131 views
2

您好我有xml文件whitch我想分析,它看起來像這樣問題解析XML

<?xml version="1.0" encoding="utf-8"?> 
<SHOP xmlns="http://www.w3.org/1999/xhtml" xmlns:php="http://php.net/xsl"> 
    <SHOPITEM> 
     <ID>2332</ID> 
     ... 
    </SHOPITEM> 
    <SHOPITEM> 
     <ID>4433</ID> 
     ... 
    </SHOPITEM> 
</SHOP> 

我的解析代碼是

from lxml import etree 

ifile = open('sample-file.xml', 'r') 
file_data = etree.parse(ifile) 

for item in file_data.iter('SHOPITEM'): 
    print item 

,但產品的打印,只有當XML容器

<SHOP xmlns="http://www.w3.org/1999/xhtml" xmlns:php="http://php.net/xsl"> 

看起來像

<SHOP> 

我該如何解析xml文檔而不用擔心這個容器定義?

回答

3

有關lxml.etree如何處理命名空間的說明,請參閱here。一般來說,你應該與他們合作,而不是試圖避免它們。在這種情況下,寫:

for item in file_data.iter('{http://www.w3.org/1999/xhtml}SHOPITEM'): 

如果你需要經常提到的命名空間,設置一個局部變量:

xhtml_ns = '{http://www.w3.org/1999/xhtml}' 
... 
for item in file_data.iter(xhtml_ns + 'SHOPITEM'):