lxml - вземете плосък списък от елементи

Бих искал да изравня lxml etree (по-специално, 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
спрете да гласувате, за да затворите. имам нужда от пълен, рекурсивен списък на всички елементи. т.е. tree.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
приемане за разбиране на списък: елементи = [ елемент за елемент в tree.iter()]. всъщност по-елегантен е list(tree.iter()). - person Walrus the Cat; 07.10.2014