2014-10-06 72 views
3

我想扁平化一個lxml etree(特別是HTML,如果它很重要)。我該如何獲得樹中所有元素的平面列表?lxml - 獲取元素的平面列表

+0

http://lxml.de/tutorial.html#tree-iteration的 – 2014-10-06 19:47:26

+0

可能重複[如何獲得一個元素的所有子元素樹與Python ElementTree?](http://stackoverflow.com/questions/10408927/how-to-get-all-sub-elements-of-an-element-tree-with-python-elementtree) – CoryKramer 2014-10-06 19:47:46

+0

退出投票關閉。我需要完整的,遞歸列出所有元素。即tree.flatten()。 – 2014-10-06 20:00:21

回答

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()中元素的元素]。實際上,更優雅的是list(tree.iter())。 – 2014-10-06 20:02:22