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
相关产品推荐
相关产品推荐

