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

如何用ElementTree修改XML中指定内容的<date-of-birth>元素?

精准修改XML中指定内容的元素

你需要的精准修改可以通过Python标准库xml.etree.ElementTree实现,核心思路是先定位所有<date-of-birth>元素,再根据文本内容筛选出需要修改的对象,具体实现如下:

标准库实现方案

import xml.etree.ElementTree as ET

# 解析目标XML文件
xml_tree = ET.parse("TestXML.xml")
root = xml_tree.getroot()

# 遍历所有<date-of-birth>元素
for dob_elem in root.findall(".//{*}date-of-birth"):
    # 匹配目标文本(strip()处理可能存在的首尾空格)
    if dob_elem.text and dob_elem.text.strip() == "12-3-1998":
        dob_elem.text = "14-11-2001"

# 保存修改后的XML(保留XML声明和UTF-8编码)
xml_tree.write("ModifiedTestXML.xml", encoding="utf-8", xml_declaration=True)

原有代码无效原因说明

  • 第一段代码错误地将目标文本12-3-1998当作标签名查找,XML中不存在该名称的元素,因此无法匹配到任何内容。
  • 第二段代码缺少文本判断逻辑,直接批量修改了所有<date-of-birth>元素,不符合精准修改的需求。

进阶方案(使用lxml库)

如果需要更强大的XPath筛选能力,可以使用lxml库(需先通过pip install lxml安装),直接通过XPath谓语筛选符合文本条件的元素:

from lxml import etree

xml_tree = etree.parse("TestXML.xml")
# 用XPath直接定位文本为指定值的<date-of-birth>元素
target_elements = xml_tree.xpath(".//*[local-name()='date-of-birth' and normalize-space(text())='12-3-1998']")

for elem in target_elements:
    elem.text = "14-11-2001"

# 保存修改结果
xml_tree.write("ModifiedTestXML.xml", encoding="utf-8", xml_declaration=True)

normalize-space()用于处理文本中的空格、换行等空白字符,让匹配逻辑更鲁棒。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:07:49