使用python拆分XML字符串并解析字段属性文件名
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、XML源数据
多段XML使用’=========='字符拼接
<?xml version="1.0" encoding="utf-8"?>
<PPO_COMPLETE>
<HEADER>
<CONTROLNO>563</CONTROLNO>
<TASK_ORDER>BPLHBL000000001</TASK_ORDER>
<TASK_REVISION>00</TASK_REVISION>
<SUPPLIER_NUMBER>124124</SUPPLIER_NUMBER>
<DROP_SHIP>N</DROP_SHIP>
<HEADER_ATTRIBUTE1/>
<HEADER_ATTRIBUTE2/>
<HEADER_ATTRIBUTE3/>
<HEADER_ATTRIBUTE4/>
<HEADER_ATTRIBUTE5/>
<HEADER_ATTRIBUTE6/>
<HEADER_ATTRIBUTE7/>
<HEADER_ATTRIBUTE8/>
<LINE>
<LINEITEM>12431ASFQ</LINEITEM>
<LINE_QTY>600</LINE_QTY>
<ERP_LINE_ID>29074326</ERP_LINE_ID>
<ITEM_REVISION/>
<NEEDBY_DATE/>
<TRANSACTION_DATE/>
<SUBINVENTORY_CODE/>
<LINE_ATTRIBUTE1>25490</LINE_ATTRIBUTE1>
<LINE_ATTRIBUTE2/>
<LINE_ATTRIBUTE3></LINE_ATTRIBUTE3>
<LINE_ATTRIBUTE4>ASD</LINE_ATTRIBUTE4>
<LINE_ATTRIBUTE5>2574479-2574481-2574496-2614852</LINE_ATTRIBUTE5>
<LINE_ATTRIBUTE6/>
<LINE_ATTRIBUTE7/>
<LINE_ATTRIBUTE8/>
</LINE>
</HEADER>
</PPO_COMPLETE>
==========
<?xml version="1.0" encoding="utf-8"?>
<PPO_COMPLETE>
<HEADER>
<CONTROLNO>563</CONTROLNO>
<TASK_ORDER>BPLHBL000000002</TASK_ORDER>
<TASK_REVISION>00</TASK_REVISION>
<SUPPLIER_NUMBER>124124</SUPPLIER_NUMBER>
<DROP_SHIP>N</DROP_SHIP>
<HEADER_ATTRIBUTE1/>
<HEADER_ATTRIBUTE2/>
<HEADER_ATTRIBUTE3/>
<HEADER_ATTRIBUTE4/>
<HEADER_ATTRIBUTE5/>
<HEADER_ATTRIBUTE6/>
<HEADER_ATTRIBUTE7/>
<HEADER_ATTRIBUTE8/>
<LINE>
<LINEITEM>12431ASFA</LINEITEM>
<LINE_QTY>600</LINE_QTY>
<ERP_LINE_ID>29074326</ERP_LINE_ID>
<ITEM_REVISION/>
<NEEDBY_DATE/>
<TRANSACTION_DATE/>
<SUBINVENTORY_CODE/>
<LINE_ATTRIBUTE1>25490</LINE_ATTRIBUTE1>
<LINE_ATTRIBUTE2/>
<LINE_ATTRIBUTE3></LINE_ATTRIBUTE3>
<LINE_ATTRIBUTE4>QWEI</LINE_ATTRIBUTE4>
<LINE_ATTRIBUTE5>2574479-2574481-2574496-2614852</LINE_ATTRIBUTE5>
<LINE_ATTRIBUTE6/>
<LINE_ATTRIBUTE7/>
<LINE_ATTRIBUTE8/>
</LINE>
</HEADER>
</PPO_COMPLETE>
二、第一版
split拆分生成文件,再从文件中解析xml属性,(没必要这么,直接看第二版就行)
# coding=utf-8
from xml.etree.ElementTree import parse
from lxml import etree
import xml.etree.ElementTree as ET
import os
xml_list = []
xml = ''
name_list = []
print('读取EDI08_FILE.xml文件开始')
try:
with open('EDI08_FILE.xml', encoding='utf-8') as f:
xml = f.read()
# print(xml)
xml_list = xml.split('==========\n')
# print(xml_list)
a = 0
for i in xml_list:
with open(str(a) + '.xml', 'w', encoding='utf-8') as x:
x.write(i)
a = a + 1
f.close()
except Exception as result:
print(f'获取EDI08_FILE.xml文件失败,ERROR:{result}')
finally:
print('读取EDI08_FILE.xml文件结束')
print('开始拆分xml文件')
try:
for i in range(0, len(xml_list)):
# 解析XML文件
f = open(str(i) + '.xml', encoding='utf-8')
tree = ET.parse(f) # 解析XML
root = tree.getroot() # 获取XML根节点
# print(list(root))
for obj in root.iter('HEADER'): # 获取XML子节点
# print(obj)
# 找到指定节点
if obj.find('TASK_ORDER').text: # XML子节点中找到需要的属性的内容
node = obj.find('TASK_ORDER').text
else:
node = 'i'
# 获取节点的值
print(node) # 输出该属性的内容
f.close()
os.replace(str(i) + '.xml',
'PPO_COMPLETE_' + node + '.xml') # 对文件重命名
# os.remove('C:/Users/32566/Desktop/WORK/EDI08_FILE/' + str(i) + '.xml') # 删除文件
except Exception as result:
print(f'拆分xml文件失败,ERROR:{result}')
finally:
print('拆分xml文件文件结束')
二、第二版
拆分xml字符串,直接解析拆分结果生成XML文件
# coding=utf-8
import xml.etree.ElementTree as ET
xml_list = []
xml = ''
name_list = []
print('读取EDI08_FILE.xml文件开始')
try:
with open('EDI08_FILE.xml', encoding='utf-8') as f:
print(type(f))
xml = f.read()
xml_list = xml.split('==========\n') # 将拆分结果写入列表
f.close()
print('开始拆分xml文件')
for xml_text in xml_list: # 列表中XML逐个解析生成XML文件
# print(xml_text)
try:
# 解析XML文件
# tree = ET.parse(xml_text)
# root = tree.getroot()
# print(list(root))
# 解析XML字符串
root = ET.fromstring(xml_text) # 将字符串转换为XML格式
print(list(root))
for obj in root.iter('HEADER'):
# print(obj)
# 找到指定节点
if obj.find('TASK_ORDER').text: # 获取需要的属性字段值
node = obj.find('TASK_ORDER').text
else:
node = 'i'
# 获取节点的值
print(node)
f.close()
with open('PPO_COMPLETE_' + node + '.xml', 'w', encoding='utf-8') as x:
x.write(xml_text) # 将获取到的字段值作为文件名并生成XML文件
except Exception as result:
print(f'拆分xml文件失败,ERROR:{result}')
finally:
print('拆分xml文件文件结束')
except Exception as result:
print(f'EDI08_FILE.xml文件拆分失败,ERROR:{result}')
finally:
print('EDI08_FILE.xml拆分文件结束')
文章介绍了如何使用Python处理XML字符串,通过=====字符拼接的多段XML数据,分别解析出TASK_ORDER字段,并依据该字段的值生成单独的XML文件。文章提供了两种方法,第一种是先拆分字符串再解析,第二种是直接解析字符串生成XML文件。

460

被折叠的 条评论
为什么被折叠?



