批量汇总XML格式的发票信息
场景将批量的XML发票信息提取汇总到EXCEL中解析XML发票importxml.etree.ElementTreeasET treeET.parse(./【365约车特选-39.54元-1个行程】高德打车电子发票.xml)roottree.getroot()forchildinroot:print(一级分支,child.tag,child.attrib)forsubchildinchild:print(--二级分支,subchild.tag,subchild.attrib,subchild.text)forsubsubchildinsubchild:print(----三级分支,subsubchild.tag,subsubchild.attrib,subsubchild.text)一级分支 Header {} --二级分支 EIid {} 26327000001329568432 --二级分支 EInvoiceTag {} SWEI3200 --二级分支 Version {} 0.32 --二级分支 InherentLabel {} None ----三级分支 InIssuType {} None ----三级分支 EInvoiceType {} None ----三级分支 GeneralOrSpecialVAT {} None ----三级分支 TaxpayerType {} None --二级分支 UndefinedLabel {} None ----三级分支 Label {} None ----三级分支 Label {} None ----三级分支 Label {} None 一级分支 EInvoiceData {} --二级分支 SellerInformation {} None ----三级分支 SellerIdNum {} 91320981MAEBB5QA34 ----三级分支 SellerName {} 昆明盛智易联科技有限公司东台分公司 ----三级分支 SellerAddr {} 东台沿海经济区科创大厦415 ----三级分支 SellerTelNum {} 18108755741 ----三级分支 SellerBankName {} 中信银行北京北辰支行 ----三级分支 SellerBankAccNum {} 8110701013603001914 --二级分支 BuyerInformation {} None ----三级分支 BuyerIdNum {} 91xxxxxxxxxxxxxxxx3 ----三级分支 BuyerName {} xxxxxx有限责任公司 ----三级分支 BuyerAddr {} None ----三级分支 BuyerTelNum {} None ----三级分支 BuyerBankName {} None ----三级分支 BuyerBankAccNum {} None --二级分支 BasicInformation {} None ----三级分支 TotalAmWithoutTax {} 38.39 ----三级分支 TotalTaxAm {} 1.15 ----三级分支 TotalTax-includedAmountInChinese {} 叁拾玖元伍角肆分 ----三级分支 TotalTax-includedAmount {} 39.54 ----三级分支 RequestTime {} 2026-07-18 23:45:14 ----三级分支 Drawer {} 杨艳彩 --二级分支 IssuItemInformation {} None ----三级分支 ItemName {} *交通运输服务*客运服务费 ----三级分支 MeaUnits {} None ----三级分支 Quantity {} 1 ----三级分支 UnPrice {} 39.35 ----三级分支 Amount {} 39.35 ----三级分支 TaxRate {} 0.030000 ----三级分支 ComTaxAm {} 1.18 ----三级分支 TotaltaxIncludedAmount {} 40.53 ----三级分支 TaxClassificationCode {} 3010101020203000000 --二级分支 IssuItemInformation {} None ----三级分支 ItemName {} *交通运输服务*客运服务费 ----三级分支 Amount {} -0.96 ----三级分支 TaxRate {} 0.030000 ----三级分支 ComTaxAm {} -0.03 ----三级分支 TotaltaxIncludedAmount {} -0.99 ----三级分支 TaxClassificationCode {} 3010101020203000000 --二级分支 SpecificInformation {} None --二级分支 AdditionalInformation {} None ----三级分支 Remark {} None 一级分支 TaxSupervisionInfo {} --二级分支 InvoiceNumber {} 26327000001329568432 --二级分支 IssueTime {} 2026-07-18 --二级分支 TaxBureauCode {} 13200000000 --二级分支 TaxBureauName {} 国家税务总局江苏省税务局 一级分支 ptbh {}寻找标签数据root.findall()仅查找标记为当前元素直接子级的元素root.findall(.//ItemName)[Element ItemName at 0x10c60aac0, Element ItemName at 0x10c60aa20]root.findall(.//ItemName)[0].text*交通运输服务*客运服务费root.findall(.//ItemName)[1].text*交通运输服务*客运服务费root.findall(.//IssuItemInformation/ItemName)[0].text*交通运输服务*客运服务费root.find()找到 第一 带有特定标签的子项root.find(.//TotalTax-includedAmount).text39.54完整脚本代码importxml.etree.ElementTreeasETfromopenpyxlimportWorkbookfromtqdmimporttqdm# 进度条工具importosfromdatetimeimportdatetime wbWorkbook()wswb.active nowdatetime.now()nownow.strftime(%Y-%m-%d %H-%M-%S)print(当前日期和时间,now)# 获取当前工作目录的完整路径current_directory_pathos.getcwd()# 获取当前工作目录的名称current_directory_nameos.path.basename(current_directory_path)print(当前工作目录的完整路径:,current_directory_path)print(当前工作目录的名称:,current_directory_name)filenamesos.listdir(.)path_files[]forfilenameinfilenames:filenamefilename.split(.)iffilename[-1]xml:filenamestr.join(.,filename)path_file./filename path_files.append(path_file)print(f文件夹下总共{len(path_files)}个XML发票文件)china_name[文件名,文件类型,发票号码,开票时间,税务局代码,税务局名称,票据编号,购买方名称,购买方税号,销售方名称,销售方税号,销售方电话,销售方开户银行,销售方开会银行账号,项目名称,规格型号,单位,数量,单价,金额,税率/征收率,税额,价税合计小写,价税合计大写]foriinrange(len(china_name)):ws.cell(row1,columni1).valuechina_name[i]defparse_xml_invoice(xml_path):treeET.parse(xml_path)roottree.getroot()# 提取关键字段try:InvoiceNumberroot.find(.//InvoiceNumber).textexceptExceptionase:InvoiceNumber未提取成功print(f文件{xml_path}遇到 InvoiceNumber 参数报错{e})try:IssueTimeroot.find(.//IssueTime).textexceptExceptionase:IssueTime未提取成功print(f文件{xml_path}遇到 IssueTime 参数报错{e})try:TaxBureauCoderoot.find(.//TaxBureauCode).textexceptExceptionase:TaxBureauCode未提取成功print(f文件{xml_path}遇到 TaxBureauCode 参数报错{e})try:TaxBureauNameroot.find(.//TaxBureauName).textexceptExceptionase:TaxBureauName未提取成功print(f文件{xml_path}遇到 TaxBureauName 参数报错{e})try:ptbhroot.find(.//ptbh).textexceptExceptionase:ptbh未提取成功print(f文件{xml_path}遇到 ptbh 参数报错{e})try:BuyerNameroot.find(.//BuyerName).textexceptExceptionase:BuyerName未提取成功print(f文件{xml_path}遇到 BuyerName 参数报错{e})try:BuyerIdNumroot.find(.//BuyerIdNum).textexceptExceptionase:BuyerIdNum未提取成功print(f文件{xml_path}遇到 BuyerIdNum 参数报错{e})try:SellerNameroot.find(.//SellerName).textexceptExceptionase:SellerName未提取成功print(f文件{xml_path}遇到 SellerName 参数报错{e})try:SellerIdNumroot.find(.//SellerIdNum).textexceptExceptionase:SellerIdNum未提取成功print(f文件{xml_path}遇到 SellerIdNum 参数报错{e})try:SellerTelNumroot.find(.//SellerTelNum).textexceptExceptionase:SellerTelNum未提取成功print(f文件{xml_path}遇到 SellerTelNum 参数报错{e})try:SellerBankNameroot.find(.//SellerBankName).textexceptExceptionase:SellerBankName未提取成功print(f文件{xml_path}遇到 SellerBankName 参数报错{e})try:SellerBankAccNumroot.find(.//SellerBankAccNum).textexceptExceptionase:SellerBankAccNum未提取成功print(f文件{xml_path}遇到 SellerBankAccNum 参数报错{e})## 判断项目名目有几行try:IssuItemInformation_listroot.findall(.//IssuItemInformation)iflen(IssuItemInformation_list)2:ItemName多个项目目录,未提取SpecMod多个项目目录,未提取MeaUnits多个项目目录,未提取Quantity多个项目目录,未提取UnPrice多个项目目录,未提取Amount多个项目目录,未提取TaxRate多个项目目录,未提取ComTaxAm多个项目目录,未提取else:try:ItemNameroot.find(.//ItemName).textexceptExceptionase:ItemName未提取成功print(f文件{xml_path}遇到 ItemName 参数报错{e})try:SpecModroot.find(.//SpecMod).textexceptExceptionase:SpecMod未提取成功print(f文件{xml_path}遇到 SpecMod 参数报错{e})try:MeaUnitsroot.find(.//MeaUnits).textexceptExceptionase:MeaUnits未提取成功print(f文件{xml_path}遇到 MeaUnits 参数报错{e})try:Quantityroot.find(.//Quantity).textexceptExceptionase:Quantity未提取成功print(f文件{xml_path}遇到 Quantity 参数报错{e})try:UnPriceroot.find(.//UnPrice).textexceptExceptionase:UnPrice未提取成功print(f文件{xml_path}遇到 UnPrice 参数报错{e})try:Amountroot.find(.//Amount).textexceptExceptionase:Amount未提取成功print(f文件{xml_path}遇到 Amount 参数报错{e})try:TaxRateroot.find(.//TaxRate).textexceptExceptionase:TaxRate未提取成功print(f文件{xml_path}遇到 TaxRate 参数报错{e})try:ComTaxAmroot.find(.//ComTaxAm).textexceptExceptionase:ComTaxAm未提取成功print(f文件{xml_path}遇到 ComTaxAm 参数报错{e})exceptExceptionase:print(f文件{xml_path}遇到 IssuItemInformation 分支 参数报错{e})try:TotalTax_includedAmountroot.find(.//TotalTax-includedAmount).textexceptExceptionase:TotalTax_includedAmount未提取成功print(f文件{xml_path}遇到 TotalTax_includedAmount 参数报错{e})try:TotalTax_includedAmountInChineseroot.find(.//TotalTax-includedAmountInChinese).textexceptExceptionase:TotalTax_includedAmountInChinese未提取成功print(f文件{xml_path}遇到 TotalTax_includedAmountInChinese 参数报错{e})context{}context{文件名:xml_path,文件类型:XML,发票号码:InvoiceNumber,开票时间:IssueTime,税务局代码:TaxBureauCode,税务局名称:TaxBureauName,票据编号:ptbh,购买方名称:BuyerName,购买方税号:BuyerIdNum,销售方名称:SellerName,销售方税号:SellerIdNum,销售方电话:SellerTelNum,销售方开户银行:SellerBankName,销售方开会银行账号:SellerBankAccNum,项目名称:ItemName,规格型号:SpecMod,单位:MeaUnits,数量:Quantity,单价:UnPrice,金额:Amount,税率/征收率:TaxRate,税额:ComTaxAm,价税合计小写:TotalTax_includedAmount,价税合计大写:TotalTax_includedAmountInChinese}returncontext i2forpath_fileinpath_files:xml_pathpath_file contextsparse_xml_invoice(xml_path)ws.cell(rowi,column1).valuecontexts[文件名]ws.cell(rowi,column2).valuecontexts[文件类型]ws.cell(rowi,column3).valuecontexts[发票号码]ws.cell(rowi,column4).valuecontexts[开票时间]ws.cell(rowi,column5).valuecontexts[税务局代码]ws.cell(rowi,column6).valuecontexts[税务局名称]ws.cell(rowi,column7).valuecontexts[票据编号]ws.cell(rowi,column8).valuecontexts[购买方名称]ws.cell(rowi,column9).valuecontexts[购买方税号]ws.cell(rowi,column10).valuecontexts[销售方名称]ws.cell(rowi,column11).valuecontexts[销售方税号]ws.cell(rowi,column12).valuecontexts[销售方电话]ws.cell(rowi,column13).valuecontexts[销售方开户银行]ws.cell(rowi,column14).valuecontexts[销售方开会银行账号]ws.cell(rowi,column15).valuecontexts[项目名称]ws.cell(rowi,column16).valuecontexts[规格型号]ws.cell(rowi,column17).valuecontexts[单位]ws.cell(rowi,column18).valuecontexts[数量]ws.cell(rowi,column19).valuecontexts[单价]ws.cell(rowi,column20).valuecontexts[金额]ws.cell(rowi,column21).valuecontexts[税率/征收率]ws.cell(rowi,column22).valuecontexts[税额]ws.cell(rowi,column23).valuecontexts[价税合计小写]ws.cell(rowi,column24).valuecontexts[价税合计大写]ii1wb.save(f./{current_directory_name}_发票汇总_{str(now)}.xlsx)print(Finish)

相关新闻

DIAMOND部署优化技巧:3种方法提升语音修复模型的推理速度与效率

DIAMOND部署优化技巧:3种方法提升语音修复模型的推理速度与效率

DIAMOND部署优化技巧:3种方法提升语音修复模型的推理速度与效率 【免费下载链接】diamond-1.0 项目地址: https://ai.gitcode.com/hf_mirrors/nineninesix/diamond-1.0 想要让DIAMOND语音修复模型在实际应用中发挥最大效能吗?🚀 今天…

2026/7/22 5:32:26 阅读更多 →
Aily Blockly 辅助 STM32 开发教程1

Aily Blockly 辅助 STM32 开发教程1

Aily Blockly 辅助 STM32 开发教程 版本: v1.0 日期: 2026年7月15日 适用平台: Aily Blockly + STM32F1xx 系列 目标读者: 嵌入式初学者、创客教育工作者、STEM 教师 目录 第 1 章:认识 Aily Blockly 与 STM32 第 2 章:开发环境搭建 第 3 章:Blockly 图形化编程基础 第 …

2026/7/22 5:31:59 阅读更多 →
Sherpa-onnx 架构深度解析:下一代跨平台语音AI推理引擎

Sherpa-onnx 架构深度解析:下一代跨平台语音AI推理引擎

Sherpa-onnx 架构深度解析:下一代跨平台语音AI推理引擎 【免费下载链接】sherpa-onnx Speech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection…

2026/7/24 10:26:12 阅读更多 →

最新新闻

高光谱图像超分辨率:几何增强小波扩散模型解析

高光谱图像超分辨率:几何增强小波扩散模型解析

1. 项目概述:高光谱图像超分辨率的几何增强小波扩散模型 高光谱图像(HSI)超分辨率是遥感领域的一项关键技术挑战。传统方法在处理HSI时面临三大核心难题:首先,高光谱数据的高维度特性导致内存消耗巨大,常规…

2026/7/24 12:02:01 阅读更多 →
拼多多商品推广扣费全解析

拼多多商品推广扣费全解析

各位拼多多运营同行大家好!做店铺付费投放,最核心、最容易踩坑的核心问题就是搞懂扣费逻辑。很多商家投放亏钱、投产忽高忽低、莫名空烧花费,本质都是对拼多多商品推广的计费规则一知半解。拼多多商品推广作为店铺核心付费引流工具&#xff0…

2026/7/24 12:02:01 阅读更多 →
Langflow 系列 | 第 6 篇:实战案例:将 Flow 发布为 API 与 MCP 工具

Langflow 系列 | 第 6 篇:实战案例:将 Flow 发布为 API 与 MCP 工具

摘要 前几篇文章已经完成了三件事:理解 Langflow 是什么,理解组件源码结构,并通过 RAG 和自定义组件完成了两个实战案例。到这里,一个 Flow 已经可以在画布和 Playground 中跑通。但如果它只能停留在页面里,就还只是一个原型。 真实工程落地中,Flow 通常需要被外部系统…

2026/7/24 12:02:01 阅读更多 →
UE4多视口开发:从架构解析到性能优化的深度实践指南

UE4多视口开发:从架构解析到性能优化的深度实践指南

1. 项目概述:为什么我们需要深入UE4多视口开发? 在数字孪生、虚拟制片、模拟训练这些前沿领域里,一个场景里同时跑着好几个不同视角的画面,早就不是什么新鲜事了。你可能在智慧工厂的监控大屏上,看到过同一个三维工厂模…

2026/7/24 12:02:01 阅读更多 →
Langflow 系列 | 第 5 篇:实战案例:开发一个自定义组件并接入 Flow

Langflow 系列 | 第 5 篇:实战案例:开发一个自定义组件并接入 Flow

摘要 上一篇文章通过 RAG Flow 说明了 Langflow 如何把文件读取、文本切分、Embedding、向量检索、Prompt 和模型调用串成一个完整 AI 应用。本文继续沿着实战路线,聚焦另一个更基础也更常见的扩展场景:开发一个自定义组件,并把它接入 Flow。 自定义组件是 Langflow 二次开…

2026/7/24 12:02:01 阅读更多 →
高性能时钟芯片LMK05028:多环路PLL架构、相位噪声优化与同步时钟设计实战

高性能时钟芯片LMK05028:多环路PLL架构、相位噪声优化与同步时钟设计实战

1. 项目概述:深入理解高性能网络同步时钟芯片在通信基础设施、工业自动化以及高端测试测量领域,一个稳定、纯净且精确的时钟信号是整个系统可靠运行的基石。无论是确保数据包在以太网交换机中精准排队,还是保证无线基站射频信号的相位一致性&…

2026/7/24 12:01:01 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻