2010-09-03 205 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'):