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

如何编写脚本从XML提取数据并按规则保存至Excel文件

问题描述

我有如下XML文件:

<?xml version="1.0" encoding="UTF-8" ?>
  <Act  bind="a" >
    <Key frame="32" value="1" />
    <Key frame="62" value="8" />
    <Key frame="106" value="14" />    
  </>
  <Act  bind="b" >
    <Key frame="32" value="1" />
    <Key frame="62" value="30" />
    <Key frame="106" value="30" />    
  </>
  <Act  bind="c" >
    <Key frame="28" value="81" />
    <Key frame="58" value="78" />
    <Key frame="102" value="78" />    
  </>
</>

需要编写脚本将这些值保存到Excel文件,要求:

  • 列数与bind值数量一致
  • 行数与所有唯一frame值数量一致
  • frame按升序排列
  • 若某个bind对应frame无值则填充0

输出示例如下:

a         b         c   
28    0         0         81
32    1         1         0
58    0         0         78
62    8         30        0
102   0         0         78
106   14        30        0
解决方案

可以用Python结合XML解析库和Excel操作库实现,步骤如下:

1. 安装依赖

先安装所需的第三方库:

pip install openpyxl

2. 完整脚本

import xml.etree.ElementTree as ET
from openpyxl import Workbook

# 解析XML文件(替换为你的XML文件路径)
tree = ET.parse('input.xml')
root = tree.getroot()

# 存储各bind对应的frame-value映射,同时收集所有frame值
bind_data = {}
all_frames = set()

for act_node in root.findall('Act'):
    bind_name = act_node.get('bind')
    bind_data[bind_name] = {}
    for key_node in act_node.findall('Key'):
        frame_num = int(key_node.get('frame'))
        value_num = int(key_node.get('value'))
        bind_data[bind_name][frame_num] = value_num
        all_frames.add(frame_num)

# 对frame值升序排序,整理bind名称列表
sorted_frames = sorted(all_frames)
bind_names = list(bind_data.keys())

# 创建Excel工作簿并写入数据
wb = Workbook()
ws = wb.active

# 写入表头
ws.append([''] + bind_names)

# 逐行写入frame和对应bind的值,无值则填0
for frame in sorted_frames:
    row_content = [frame]
    for bind in bind_names:
        row_content.append(bind_data[bind].get(frame, 0))
    ws.append(row_content)

# 保存Excel文件
wb.save('output.xlsx')

脚本说明

  • 先解析XML文件,遍历每个Act节点提取bind标识,再遍历下属Key节点收集frame和对应value,同时记录所有出现过的frame值
  • 对收集到的frame值进行升序排序,确保输出行的顺序符合要求
  • 创建Excel工作簿,先写入bind名称作为表头,再逐行写入frame值和各bind对应的数值,不存在的映射自动填充0
  • 最后将数据保存为指定的Excel文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:08:49