XML缺失<MAIN>外层包装标签:如何修改Python代码补全?
解决XML提取时缺失外层
<MAIN>标签的问题 嘿,我一眼就瞅出你代码里的问题啦——你现在是把每个<Transaction>单独输出,没把它们统一放到同一个<MAIN>根节点里,所以才会缺少外层的包裹标签。
问题根源
你原来的代码里,每次循环都会新建一个<MAIN>元素,但并没有把所有提取出来的<Transaction>都挂载到同一个<MAIN>下面,反而把单个<Transaction>存进列表后逐个写入文件,自然就没有统一的外层标签了。
修改后的代码
直接调整逻辑,先创建唯一的根节点,再把所有交易节点都挂到它下面,最后一次性写入整个结构:
import pandas as pd import xml.etree.ElementTree as ET from lxml import etree path_source = 'source\\path' # 注意Windows路径要用双反斜杠,或者用原始字符串r'source\path' path_dest = 'dest\\path' tree = ET.parse(path_source) root = tree.getroot() # 先创建唯一的<MAIN>根节点 main_root = ET.Element('MAIN') for trx in root.iter('transaction'): ticket = trx.find('ticket').text # 创建<Transaction>子节点并挂载到MAIN根节点下 transaction_node = ET.SubElement(main_root, 'Transaction') # 把ticket值写入子节点 ET.SubElement(transaction_node, 'ticket').text = ticket # 把整个完整的XML结构写入文件 with open(path_dest, 'wb') as f: # 如果需要格式化输出(带缩进的美观格式),可以用lxml的tostring替代 # f.write(etree.tostring(main_root, pretty_print=True, encoding='utf-8')) f.write(ET.tostring(main_root, method="xml", encoding='utf-8'))
额外优化提示
如果想要生成格式更规整(带缩进)的XML,可以用你导入的lxml库来输出,把最后写入的代码换成注释里的那行,这样生成的XML可读性会更好。
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

