如何用Python写入XML文件 Python修改XML节点数据

最稳妥方式是用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() 可能丢失原有缩进和换行。稳妥做法:

  • 读取时用 ET.parse(filename),获得可修改的 ElementTree 对象
  • 修改完成后,用 tree.write(filename, encoding="utf-8", xml_declaration=True)
  • 若需保留原始缩进,可在解析后手动补空格,或使用 minidom 重载输出(适合小文件)

处理常见坑点

几个容易出错但实际很关键的细节:

  • 中文写入报错?务必加 encoding="utf-8" 并确保文件以UTF-8保存
  • 修改没生效?确认你改的是 node.text 而不是 node 本身;检查是否找对了节点(打印 node.tagnode.text 验证)
  • 属性不存在就设值?node.set("key", "val") 会自动添加,无需预先判断
  • 要删节点?用 parent.remove(child_node),不能直接 del