lxml - 获取元素的平面列表

问题描述:

我想扁平化一个lxml etree(特别是HTML,如果它很重要)。我该如何获得树中所有元素的平面列表?lxml - 获取元素的平面列表

+0

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

+0

可能重复[如何获得一个元素的所有子元素树与Python ElementTree?](http://*.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

可以使用.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