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

如何使用Python的xml.etree模块修改XML文件中子节点文本并覆盖原文件

解决Python修改XML子节点文本并覆盖原文件的问题

我来帮你修正代码里的问题,让你顺利完成修改:

你的代码存在两个关键问题:

  1. 修改对象错误:你现在用o.text = "ERJ"修改的是<object>节点的文本内容,而不是它下面的<name>子节点的文本。这会直接清空<object>里的所有子节点,完全不符合你的需求。
  2. 缺少写入文件步骤:修改只停留在内存中,没有将修改后的XML内容写回原文件,所以原文件不会有任何变化。

正确的完整代码

import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse("C:/Users/PC/Desktop/185.xml")
root = tree.getroot()

# 找到所有<object>节点
objects = root.findall(".//object")

for o in objects:
    # 定位到当前<object>下的<name>子节点
    name_node = o.find("name")
    # 判断文本是否为目标内容,是的话修改
    if name_node.text == "ENERGY-TAG":
        name_node.text = "ERJ"

# 将修改后的内容覆盖写入原文件
tree.write("C:/Users/PC/Desktop/185.xml", encoding='utf-8', xml_declaration=True)

代码说明:

  • 用name_node = o.find("name")精准定位到<object>下的<name>子节点,再修改它的text属性,这才是你要修改的目标内容。
  • 最后调用tree.write()方法,指定原文件路径、编码格式,加上xml_declaration=True可以保证生成的XML文件包含正确的XML声明头(比如<?xml version='1.0' encoding='utf-8'?>)。

验证效果

修改后你的XML会变成:

<?xml version='1.0' encoding='utf-8'?>
<annotation>
  <object> 
    <name>ERJ</name> 
    <pose>Unspecified</pose> 
    <truncated>1</truncated> 
    <difficult>0</difficult> 
    <bndbox> 
      <xmin>397</xmin> 
      <ymin>470</ymin> 
      <xmax>1500</xmax> 
      <ymax>1816</ymax> 
    </bndbox> 
  </object> 
</annotation>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:14:07