本文介绍如何将任务依赖列表递归转换为结构清晰、缩进规范的嵌套 xml,解决原始代码中“末级子节点丢失”和“无缩进输出”的核心问题,并通过字典预索引与健壮递归逻辑确保所有节点(包括叶子节点)均被正确渲染。
在处理具有父子/依赖关系的任务数据时,常需将其可视化为树形 XML 结构。原始代码虽采用递归思路,但存在两个关键缺陷:
- 末级节点缺失:当某任务的 taskIdRelated 在输入列表中找不到对应记录(即该节点为叶子),原逻辑直接跳过创建,导致如 task5、task22、task8 等终端节点未生成 元素;
- 无格式化缩进:ET.tostring() 默认输出单行 XML,可读性差,不利于调试与集成。
以下方案通过三步优化彻底解决:
✅ 步骤一:预构建哈希索引(O(1) 查找)
将原始 tasks 列表转为字典 task_dict,以 taskId(即每行首字段)为键,避免每次递归都遍历全量列表:
task_dict = {task[0]: task for task in tasks}
✅ 步骤二:健壮递归构造(处理叶子节点)
定义 build_xml(task_dict, task),其核心逻辑为: