最常用、最稳妥的方式是使用内置的 xml.etree.ElementTree(ET):先用 ET.parse() 加载,再用 find()/findall() 定位元素,通过 .text 或 .set() 修改内容或属性,最后用 .write() 保存并指定 encoding="utf-8" 和 xml_declaration=True。

用 python 更新 XML 文件中的某个值,最常用、最稳妥的方式是使用内置的 xml.etree.ElementTree(简称 ET)。它轻量、无需额外安装,适合大多数结构清晰的 XML 场景。
定位并修改指定元素的文本内容
适用于你想改某个标签内部的文本,比如把 <name>Alice</name> 改成 <name>Bob</name>:
- 用
ET.parse()加载 XML 文件 - 用
.find()或.findall()找到目标元素(支持 XPath 简写,如"user/name") - 直接赋值给
.text属性即可修改 - 调用
.write()保存回文件(注意设置encoding="utf-8"和xml_declaration=True保持格式)
示例:
import xml.etree.ElementTree as ET <p>tree = ET.parse("config.xml") root = tree.getroot()</p><h1>找到第一个 <version> 元素并更新其文本</h1><p>version_elem = root.find("version") if version_elem is not None: version_elem.text = "2.5.1"</p><p>tree.write("config.xml", encoding="utf-8", xml_declaration=True)
修改元素的属性值
如果要改的是属性,比如把 <server port="8080"></server> 改成 port="9000",用 .set() 方法:
立即学习“Python免费学习笔记(深入)”;
-
elem.set("port", "9000")—— 直接更新或新增属性 -
elem.attrib["port"] = "9000"也行,但.set()更推荐(会自动处理命名空间等细节)
按条件查找并更新(比如 ID 或 name 匹配)
当 XML 有多个同类元素,需根据属性筛选时,可用 XPath 表达式:
-
root.find('.//user[@id="102"]/email')→ 找 id=”102″ 的 user 下的 email 元素 -
root.findall('item[@category="book"]')→ 找所有 category=”book” 的 item - 找到后仍用
.text或.set()修改
注意编码和格式细节
直接 write 可能导致缩进丢失或中文乱码:
- 务必加
encoding="utf-8",否则 windows 上容易出问题 - 加
xml_declaration=True保证开头有<?xml version='1.0' encoding='utf-8'?> - 如需保留原始缩进/换行,ET 本身不自动美化;可配合
xml.dom.minidom重排(稍重,但格式好看)
基本上就这些。简单更新不用装第三方库,ET 足够可靠。复杂嵌套或带命名空间的 XML 再考虑 lxml。