我有来自此链接的以下 XML 文件作为示例:
我有以下打印输出的递归函数:
import xml.etree.ElementTree as ET
def perf_func(elem, func, level=0):
func(elem,level)
for child in elem.getchildren():
perf_func(child, func, level+1)
def print_level(elem,level):
print('-'*level+elem.tag)
elemList = ['description', 'episodes', 'movie', 'collection', 'stars', 'rating', 'year', 'type', 'format']
xmlTree = ET.parse('XML_file.xml')
下面的行打印结果:
perf_func(xmlTree.getroot(), print_level)
输出:
collection
-movie
--type
--format
--year
--rating
--stars
--description
-movie
--type
--format
--year
--rating
--stars
--description
-movie
--type
我需要将输出保存到下面的项目列表中。
hierarchy = [collection, -movie, --format, --year, --rating, ... ]
所以尝试了以下修改。但无法将结果作为列表。
import xml.etree.ElementTree as ET
def perf_func(elem, func, level=0):
func(elem,level)
for child in elem.getchildren():
yield from perf_func(child, func, level+1)
def print_level(elem,level):
print ('-'*level+elem.tag)
我试图修改 print_level() 函数以提供一些可返回的输出而不是打印它,但不知道该怎么做。
perf_func(xmlTree.getroot(), print_level)
<generator object perf_func at 0x000001F6432BD2C8>
将生成器更改为 list 给我相同的输出
list(perf_func(xmlTree.getroot(), print_level))
我在其他链接中检查了类似的问题,但不太了解。