报价
findall,
Element.findall()仅查找带有标签的元素,这些标签是当前元素的直接子元素。
由于它只能找到直系孩子,因此我们需要递归地找到其他孩子,像这样
>>> import xml.etree.ElementTree as ET>>> >>> def find_rec(node, element, result):... for item in node.findall(element):... result.append(item)... find_rec(item, element, result)... return result... >>> find_rec(ET.parse("h.xml"), 'saybye', [])[<Element 'saybye' at 0x7f4fce206710>, <Element 'saybye' at 0x7f4fce206750>, <Element 'saybye' at 0x7f4fce2067d0>]更好的是,使其成为生成器函数
>>> def find_rec(node, element):... for item in node.findall(element):... yield item... for child in find_rec(item, element):... yield child... >>> list(find_rec(ET.parse("h.xml"), 'saybye'))[<Element 'saybye' at 0x7f4fce206a50>, <Element 'saybye' at 0x7f4fce206ad0>, <Element 'saybye' at 0x7f4fce206b10>]


