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

Python多层嵌套XML转CSV时父子节点字段映射错误如何解决

多层嵌套XML转CSV父子节点属性匹配错误修复

问题根因

现有代码将工单节点遍历、备注节点遍历拆成了两个完全独立的循环,遍历备注时没有关联备注所属的工单节点,直接复用了第一个循环最后留存的display_id变量,导致所有备注都绑定了同一个账号ID,匹配关系完全错乱。

修复逻辑

不要跨层级全局查找备注节点,改为以单个<helpdesk-ticket>工单节点为遍历单位:

  • 每读取一个工单节点,先提取该工单对应的account-id
  • 仅在当前工单节点的子节点范围内查找所有下属备注
  • 将当前工单ID和每条备注一一配对后存入结果列表,即可保证关联关系正确

修正后完整代码

import xml.etree.ElementTree as Xet
import pandas as pd
  
cols = ["account-id","notes"]
rows = []
  
# 路径前加r前缀,避免Windows路径反斜杠触发转义错误
xmlparse = Xet.parse(r'E:\python\Tickets132.xml')
root = xmlparse.getroot()

# 逐一遍历每个工单节点
for ticket in root.findall('helpdesk-ticket'):
    # 提取当前工单的账号ID
    current_acc_id = ticket.find("account-id").text
    # 遍历当前工单下的所有备注
    for note in ticket.findall('./notes/helpdesk-note'):
        note_text = note.find("body").text.strip()
        rows.append({
            "account-id": current_acc_id,
            "notes" : note_text,
        })
  
df91 = pd.DataFrame(rows, columns=cols)
print(df91)
# 导出时加index=False,避免生成多余的索引列
df91.to_csv('output21.csv', index=False)

运行结果

执行代码后将得到符合预期的输出:

account-id              notes
0         123  content 1 I need
1         123  content 2 I need
2         456  content 3 I need
3         456  content 4 I need

额外优化说明

  • Windows本地文件路径前添加r前缀,可避免路径中\t、\n等字符被识别为转义符,导致文件读取失败
  • 对备注文本调用.strip()方法,可自动清除示例文本中部分内容前后的冗余空格
  • CSV导出时传入index=False参数,不会把DataFrame自带的行序号作为单独一列存入文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:03:23