2014-10-06 2 views
3

Я хотел бы сгладить lxml etree (в частности, HTML, если это имеет значение.) Как я могу получить плоский список всех элементов в дереве?lxml - получить плоский список элементов

+0

http://lxml.de/tutorial.html#tree-iteration –

+0

возможно дубликат [Как получить все дочерние элементы элемента дерево с Python ElementTree?] (http://stackoverflow.com/questions/10408927/how-to-get-all-sub-elements-of-an-element-tree-with-python-elementtree) – CoryKramer

+0

покинул голосование, чтобы закрыть , Мне нужен полный, рекурсивный список всех элементов. т. е. tree.flatten(). –

ответ

6

Вы можете использовать метод .iter(), например, так:

from lxml import etree 

xml = etree.XML('''<html><body> 
        <p>hi there</p><p>2nd paragraph</p> 
        </body></html>''') 

# If you want to visit all of the descendants 
for element in xml.iter(): 
    print element.tag 

# Or, if you want to have a list of all the descendents 
all_elements = list(xml.iter()) 
print [element.tag for element in all_elements] 
+0

принятие для понимания списка: elements = [элемент для элемента в tree.iter()]. на самом деле, более элегантный, это список (tree.iter()). –

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