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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:51:00