最稳妥方式是用xml.etree.ElementTree:创建用Element/SubElement,修改用text/set,保存需指定encoding="utf-8"和xml_declaration=True;查找节点支持XPath子集,删除用parent.remove()。

用Python写入和修改XML文件,最常用、最稳妥的方式是使用内置的 xml.etree.ElementTree(简称ET)。它轻量、标准、无需额外安装,适合大多数结构清晰的XML操作场景。
创建并写入新的XML文件
先构建元素树,再写入磁盘。注意编码和换行美化可提升可读性:
- 用 ET.Element() 创建根节点,ET.SubElement() 添加子节点
- 通过 .text 设置文本内容,.set("属性名", "值") 添加或修改属性
- 用 ET.ElementTree(root).write() 保存,建议指定 encoding="utf-8" 和 xml_declaration=True
- 如需缩进(Python 3.9+),可调用 ET.indent(tree);旧版本可用第三方库
xml.dom.minidom格式化
定位并修改已有XML中的节点数据
关键在准确查找目标节点——支持XPath语法(有限子集),常用方法有:
- root.find("tag"):找第一个直接子节点
-
root.findall(".//item"):查找所有后代中名为
item的节点(.//表示任意层级) -
root.iter("name"):遍历所有名为
name的节点(含嵌套) - 查到节点后,直接赋值 node.text = "新内容" 或 node.set("attr", "新值")
保存修改后的XML(避免覆盖原格式问题)
直接 write() 可能丢失原有缩进和换行。稳妥做法:
立即学习“Python免费学习笔记(深入)”;
- 读取时用 ET.parse(filename),获得可修改的
ElementTree对象 - 修改完成后,用 tree.write(filename, encoding="utf-8", xml_declaration=True)
- 若需保留原始缩进,可在解析后手动补空格,或使用
minidom重载输出(适合小文件)
处理常见坑点
几个容易出错但实际很关键的细节:
- 中文写入报错?务必加 encoding="utf-8" 并确保文件以UTF-8保存
- 修改没生效?确认你改的是
node.text而不是node本身;检查是否找对了节点(打印node.tag和node.text验证) - 属性不存在就设值?node.set("key", "val") 会自动添加,无需预先判断
- 要删节点?用 parent.remove(child_node),不能直接 del










