You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 如何将XML文件根节点替换为另一XML不带子元素的根节点

问题排查

你现有代码的错误点如下:

  • source_root本身就是XML2的<report>根节点,使用findall('report')是查找根节点下的子级report元素,返回结果为空,删除逻辑没有执行
  • 你需要删除的是根节点下的所有子元素,而非删除report节点本身
实现代码

下面是两种可用的实现方案:

方案1(直接删除子元素,更直观)

直接遍历删除根节点的所有直接子元素,根节点的属性会完整保留:

import xml.etree.ElementTree as ET

# 读取XML2文件,获取根节点
source_tree = ET.parse('XML2.xml')
source_root = source_tree.getroot()

# 遍历删除根节点所有直接子元素,子元素携带的嵌套节点会同步被移除
for child in list(source_root):
    source_root.remove(child)

# 写入得到目标XML1
source_tree.write('XML1.xml', encoding='utf-8', xml_declaration=True)

方案2(使用clear方法,代码更简洁)

注意Element.clear()会同时清空节点的属性和子元素,所以需要提前备份属性:

import xml.etree.ElementTree as ET

source_tree = ET.parse('XML2.xml')
source_root = source_tree.getroot()
# 备份根节点所有属性
root_attrib = source_root.attrib.copy()
# 清空节点所有内容
source_root.clear()
# 恢复根节点属性
source_root.attrib = root_attrib

source_tree.write('XML1.xml', encoding='utf-8', xml_declaration=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:06:01