You need to enable JavaScript to run this app. 使用Python pandas读取xlsx内容并写入生成XML的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

使用Python pandas读取xlsx内容并写入生成XML的问题求助

问题原因与修复方案

错误点梳理

  • 核心错误1:XML元素对象被意外覆盖:你调用ET.SubElement()创建XML节点对象后,立即将节点变量重新赋值为pandas读取的单元格值,丢失了XML节点引用,后续无法为节点赋值内容
  • 核心错误2:日期类型未转换为字符串:pandas读取的datetime类型数据不能直接赋值给XML节点的text属性,需要先转为字符串格式
  • 冗余错误:重复导入datetime模块、存在无效的DataFrame操作代码(__setitem__相关代码属于误写操作,无实际作用)

修正后可运行代码

import pandas as pd
import datetime
import json
from xml.etree import ElementTree as ET

# 读取Excel并处理日期格式,提前转成字符串适配XML要求
df = pd.read_excel('parser.xlsx')
df['data autorizzazio'] = pd.to_datetime(df['data autorizzazio']).dt.strftime('%Y-%m-%d')

# 注册命名空间
ET.register_namespace("CBIPaymentRequest","http://www.w3.org/2001/XMLSchema-instance")

# 构建XML根节点结构
root = ET.Element("{http://www.w3.org/2001/XMLSchema-instance}CBIPaymentRequest")
root1 = ET.SubElement(root,"GrpHdr") 

# 处理MsgId节点:保留节点对象,直接为text属性赋值
MsgId = ET.SubElement(root1,'MsgId')
MsgId.text = str(df.loc[0].values[1]) 
print(MsgId.text)

# 处理PROVA节点
Prova = ET.SubElement(root1,'PROVA')
Prova.text = str(df.loc[0].values[5])
print(Prova.text)

# 写入XML文件,指定编码避免非英文字符乱码
tree = ET.ElementTree(root)
tree.write("pandas_output_test_1.xml", encoding='utf-8', xml_declaration=True)

补充说明

  • 如果需要自定义日期输出格式,修改dt.strftime()里的格式符即可,例如%Y-%m-%d %H:%M:%S可以输出带时分秒的完整日期
  • 如果需要遍历Excel所有行生成对应XML节点,在外层添加for循环遍历df的每一行即可
  • 写入XML时指定encoding='utf-8'和xml_declaration=True可以避免中文、特殊字符乱码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 13:24:01