2013-10-08 4 views
0

У меня есть XML, который выглядит следующим образом:Python LXML и разбор поддерева

<root> 
<foo> 
<a></a> 
<b></b> 
<c></c> 
</foo> 
<bars> 
<bar> 
<one>interesting</one> 
<two>interesting</two> 
<three>interesting</three> 
</bar> 
<bar> 
<one>interesting</one> 
<two>interesting</two> 
<three>interesting</three> 
</bar> 
<bar> 
<one>interesting</one> 
<two>interesting</two> 
<three>interesting</three> 
</bar> 
</bars> 
<root> 

Я хочу, чтобы извлечь интересный текст из всех баров. Можете ли вы сказать, с чего начать? Я пытался использовать

bars = etree.iterparse(xml_data, tag="bars") 

, но я не мог итерацию через него.

ответ

0

Используйте метод findall, чтобы вернуть все соответствующие элементы.

xml_data = '''<?xml version='1.0' encoding='ASCII' ?> 
<root> 
<foo> 
<a></a> 
<b></b> 
<c></c> 
</foo> 
<bars> 
<bar> 
<one>interesting</one> 
<two>interesting</two> 
<three>interesting</three> 
</bar> 
<bar> 
<one>interesting</one> 
<two>interesting</two> 
<three>interesting</three> 
</bar> 
<bar> 
<one>interesting</one> 
<two>interesting</two> 
<three>interesting</three> 
</bar> 
</bars> 
</root> 
''' 

from lxml import etree 

root = etree.fromstring(xml_data) 
for bars in root.findall('.//bars'): 
    print(etree.tostring(bars, method='text')) 
+0

Но как я могу извлечь только текст между тегами (один, два и три)? Кроме того, если имеет свойство id, например , как я могу его извлечь? – user2091046

+0

@ user2091046, Чтобы получить атрибут 'id',' bars.find ('.// ​​bar'). Get ('id') '. – falsetru

+0

@ user2091046, [Примите ответ] (http://meta.stackexchange.com/a/5235), если это было полезно. – falsetru

Смежные вопросы