如何使用Python将单个XML文件按根节点子元素拆分为多个独立XML文件
实现XML根节点下不同名称子元素的拆分方案
完全可以按照根节点下子元素的顺序逐个生成独立XML文件,无需提前知道子元素的具体名称。
实现思路
使用Python标准库xml.etree.ElementTree即可完成,核心逻辑如下:
- 读取原XML文件,解析得到根节点对象
- 通过
list(根节点)直接获取根节点下所有直接子元素的有序列表,顺序与原XML中的排列顺序完全一致 - 遍历每个子元素,每次创建新的
<Source>根节点,将当前子元素作为唯一子节点加入新根 - 格式化XML结构后写入独立文件
完整实现代码
import xml.etree.ElementTree as ET import copy # 替换为你的源XML文件路径 tree = ET.parse("source.xml") root = tree.getroot() # 遍历根节点下所有直接子元素,按原XML顺序处理 for idx, child in enumerate(root, start=1): # 创建新的Source根节点 new_root = ET.Element("Source") # 深拷贝当前子元素到新根下,避免修改原XML结构 new_root.append(copy.deepcopy(child)) new_tree = ET.ElementTree(new_root) # 格式化XML缩进(Python 3.9及以上版本支持,不需要格式化可删除该行) ET.indent(new_tree, space=" ") # 输出文件名可自定义,当前规则为xml1.xml、xml2.xml,也可改为f"{child.tag}.xml"用元素名命名 output_name = f"xml{idx}.xml" new_tree.write(output_name, encoding="utf-8", xml_declaration=True)
说明
- 不需要用
findall匹配固定标签名,list(root)会自动获取根节点下所有第一层子元素,完全适配子元素名称不同的场景 - 处理顺序和原XML中子元素的排列顺序1:1对应,第一个子元素生成xml1.xml,第二个生成xml2.xml,符合需求
- 如果使用Python 3.9以下版本需要格式化XML,可以引入第三方库
lxml的格式化方法,或者手动处理缩进即可 - 生成的文件结构和你给出的预期输出完全一致
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

