Python递归生成XML时无法显示最后子节点的问题求助
将任务列表转换为指定层级XML格式的问题
输入任务列表
tasks = [ ('task1', 'Type1', 'Description1', 'task11', 'Type11', 'Description11'), ('task2', 'Type2', 'Description2', 'task22', 'Type22', 'Description22'), ('task11', 'Type11', 'Description11', 'task33', 'Type33', 'Description33'), ('task33', 'Type33', 'Description33', 'task3', 'Type3', 'Description3'), ('task3', 'Type3', 'Description3', 'task5', 'Type5', 'Description5'), ('task4', 'Type4', 'Description4', 'task6', 'Type6', 'Description6'), ('task6', 'Type6', 'Description6', 'task7', 'Type7', 'Description7'), ('task7', 'Type7', 'Description7', 'task8', 'Type8', 'Description8'), ('taskX', 'TypeX', 'DescriptionX', 'task33', 'Type33', 'Description33'), ]
期望XML输出
<task taskId="task1" taskIdType="Type1" taskIdDescription="Description1"> <task taskIdRelated ="task11" taskIdRelatedType="Type11" taskIdRelatedDescription="Description11"> <task taskIdRelated="task33" taskIdRelatedType="Type33" taskIdRelatedDescription="Description33"> <task taskIdRelated="task3" taskIdRelatedType="Type3" taskIdRelatedDescription="Description3"> <task taskIdRelated="task5" taskIdRelatedType="Type5" taskIdRelatedDescription="Description5" /> </task> </task> </task> </task> <task taskId="task2" taskIdType="Type2" taskIdDescription="Description2"> <task taskIdRelated="task22" taskIdRelatedType="Type22" taskIdRelatedDescription="Description22" /> </task> </task> <task taskId="task4" taskIdType="Type4" taskIdDescription="Description4"> <task taskIdRelated="task7" taskIdRelatedType="Type7" taskIdRelatedDescription="Description7"> <task taskIdRelated="task8" taskIdRelatedType="Type8" taskIdRelatedDescription="Description8" /> </task> </task> <task taskId="taskX" taskIdType="TypeX" taskIdDescription="DescriptionX"> <task taskIdRelated="task33" taskIdRelatedType="Type33" taskIdRelatedDescription="Description33"> <task taskIdRelated="task3" taskIdRelatedType="Type3" taskIdRelatedDescription="Description3"> <task taskIdRelated="task5" taskIdRelatedType="Type5" taskIdRelatedDescription="Description5" /> </task> </task> </task>
现有代码问题
尝试了以下Python代码,但无法显示每个节点的最后子节点:比如task1节点下无法显示task5,task2节点下无法显示task22等。
现有代码
import xml.etree.ElementTree as ET # Sample list of tasks with taskId, taskIdType, taskIdDescription, # taskIdRelated, taskIdRelatedType, taskIdRelatedDescription columns tasks = [ ('task1', 'Type1', 'Description1', 'task11', 'Type11', 'Description11'), ('task2', 'Type2', 'Description2', 'task22', 'Type22', 'Description22'), ('task11', 'Type11', 'Description11', 'task33', 'Type33', 'Description33'), ('task33', 'Type33', 'Description33', 'task3', 'Type3', 'Description3'), ('task3', 'Type3', 'Description3', 'task5', 'Type5', 'Description5'), ('task4', 'Type4', 'Description4', 'task6', 'Type6', 'Description6'), ('task6', 'Type6', 'Description6', 'task7', 'Type7', 'Description7'), ('task7', 'Type7', 'Description7', 'task8', 'Type8', 'Description8'), ('taskX', 'TypeX', 'DescriptionX', 'task33', 'Type33', 'Description33'), ] def build_xml(tasks, task_id): task_element = ET.Element('task') task_element.set('taskId', task_id[0]) task_element.set('taskIdType', task_id[1]) task_element.set('taskIdDescription', task_id[2]) related_tasks = [t for t in tasks if t[0] == task_id[3]] if related_tasks: related_task = related_tasks[0] related_element = build_xml(tasks, related_task) task_element.append(related_element) return task_element def find_root_task(tasks): all_task_ids = set([t[0] for t in tasks]) related_task_ids = set([t[3] for t in tasks]) return [task_id for task_id in all_task_ids if task_id not in related_task_ids] for task in tasks: task_id = task[0] if task_id in find_root_task(tasks): task_element = build_xml(tasks, task) # Convert the XML element to string xml_str = ET.tostring(task_element, encoding='unicode') print(xml_str)
请求帮助
需要解决上述代码的问题,生成符合期望格式的XML,支持使用任何编程语言。
内容的提问来源于stack exchange,提问作者dside
相关产品推荐
相关产品推荐

