2010-09-03 3 views
2

Привет У меня есть файл XML ведьма я хочу разобрать, это выглядит примерно такПроблема разбора 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

См. here для объяснения того, как lxml.etree обрабатывает пространства имен. В общем, вы должны работать с ними, а не пытаться избежать их. В этом случае пишут:

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'): 
Смежные вопросы