lxml — получить плоский список элементов

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


person Walrus the Cat    schedule 06.10.2014    source источник
comment
lxml.de/tutorial.html#tree-iteration   -  person Robᵩ    schedule 06.10.2014
comment
возможный дубликат Как получить все подэлементы дерева элементов с Python ElementTree?   -  person Cory Kramer    schedule 06.10.2014
comment
выйти из голосования, чтобы закрыть. мне нужен полный, рекурсивный список всех элементов. то есть дерево.flatten().   -  person Walrus the Cat    schedule 07.10.2014


Ответы (1)


Вы можете использовать метод .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]
person Robᵩ    schedule 06.10.2014
comment
принятие для понимания списка: elements = [элемент для элемента в tree.iter()]. на самом деле более элегантным является list(tree.iter()) . - person Walrus the Cat; 07.10.2014