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

Python遍历XML元素去重 按Class+Location求和JobRecord的Salary

直接操作XML节点的实现方案

你可以直接使用Python标准库xml.etree.ElementTree直接操作XML节点,不需要转换为字典、列表或DataFrame结构,完整实现代码如下:

import xml.etree.ElementTree as ET

# 1. 解析XML,读取文件用 ET.parse('你的文件路径.xml') 即可
xml_str = '''
<StaffRecords>
    <EmployeeName>John Doe</EmployeeName>
    <EmployeeTitle>Financial Analyst</EmployeeTitle>
    <Positions>
        <JobRecord>
            <Class>100</Class>
            <Location>7</Location>
            <Salary>40000</Salary>
        </JobRecord>
        <JobRecord>
            <Class>100</Class>
            <Location>7</Location>
            <Salary>40000</Salary>
        </JobRecord>
    </Positions>
</StaffRecords>
'''
root = ET.fromstring(xml_str)
# 读取文件的话用 root = ET.parse('你的文件路径.xml').getroot()

# 2. 定位Positions节点,初始化分组缓存
positions_node = root.find('Positions')
job_group = {}

# 3. 遍历所有JobRecord完成分组求和
for job in positions_node.findall('JobRecord'):
    cls_val = job.find('Class').text.strip()
    loc_val = job.find('Location').text.strip()
    salary_val = int(job.find('Salary').text.strip())
    group_key = (cls_val, loc_val)
    if group_key not in job_group:
        # 首次出现的分组,保留当前节点
        job_group[group_key] = [salary_val, job]
    else:
        # 重复分组,仅累加薪资
        job_group[group_key][0] += salary_val

# 4. 清空原有全部JobRecord节点
for job in positions_node.findall('JobRecord'):
    positions_node.remove(job)

# 5. 将去重求和后的节点重新插入Positions
for total_sal, keep_job in job_group.values():
    keep_job.find('Salary').text = str(total_sal)
    positions_node.append(keep_job)

# 输出结果,写入文件用 ET.ElementTree(root).write('输出路径.xml', encoding='utf-8')
ET.indent(root) # Python 3.9及以上版本支持格式化缩进
print(ET.tostring(root, encoding='unicode'))

实现说明

  • 全程直接操作XML原生Element节点,没有做整体结构转换
  • 临时字典仅用作分组求和的缓存,不涉及XML全量转储为其他数据结构
  • 处理完成后直接修改原XML树,可直接保存为XML文件,符合强制格式要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:57:00