You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElementTree遍历XML时仅获取当前FOLDER下JOB属性的问题求解

问题根因

你的代码出现重复输出的核心原因是:内层遍历JOB节点时调用的是全局文档对象tree的iter('JOB')方法,这个方法会递归扫描整个XML文档中所有的JOB节点,和外层循环当前拿到的FOLDER节点没有任何绑定关系,所以每遍历到一个FOLDER,都会把全文档所有JOB打印一遍。另外内外层循环使用了同名变量nodes,也存在变量覆盖的逻辑隐患。

修改方法

将内层遍历的调用主体从全局tree替换为外层循环当前取到的FOLDER节点,仅遍历当前FOLDER下的JOB子节点即可,同时建议区分内外层循环的变量名,避免混淆。
修改后的代码如下:

import xml.etree.ElementTree as ET

# 替换为你实际的XML文件路径
tree = ET.parse('your_file_path.xml')

for folder in tree.iter('FOLDER'):
    folder_name = folder.attrib.get('FOLDER_NAME')
    print(f'NameFolder is ...{folder_name}')
    
    # 仅遍历当前FOLDER节点下的所有JOB
    for job in folder.iter('JOB'):
        job_name = job.attrib.get('JOBNAME')
        print(f'NAMEEEE ....  {job_name}')
运行结果

执行后将直接输出你预期的分组效果:

NameFolder is ...FOLDER_ONE
NAMEEEE ....  JOBA
NAMEEEE ....  JOBB
NameFolder is ...FOLDER_TWO
NAMEEEE ....  JOBC
NAMEEEE ....  JOBD

补充:如果所有JOB都是FOLDER的直接子节点、不存在多层嵌套,内层循环也可以用folder.findall('JOB')实现,效果和folder.iter('JOB')一致;如果JOB可能嵌套在FOLDER下的其他子节点中,用iter兼容性更好。

内容的提问来源于stack exchange,提问作者Luis perez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:09:22