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

Python操作XML:更新指定registration_no节点的make和model值

Python修改指定XML节点值问题修复

原有代码失效原因

  • 拼写错误:节点名registration_no被错写为registraion_no,缺失字母t,直接导致匹配失败。
  • XPath语法误用:[@属性名='值']是筛选节点属性的语法,但registration_no是vehicle节点下的子元素,不是vehicle的属性,该写法无法匹配到子元素值符合条件的节点。
  • 功能缺失:仅编写了make节点的更新逻辑,未覆盖model节点的更新需求。
  • 匹配鲁棒性不足:示例XML中所有节点的文本内容前后都带有空白字符,直接做精确值匹配容易漏判。

正确实现方案

使用Python标准库xml.etree.ElementTree即可完成需求,无需安装第三方依赖,代码如下:

import xml.etree.ElementTree as ET

# 1. 加载目标XML文件,替换为你的实际文件路径
tree = ET.parse("motorvehicles.xml")
root = tree.getroot()

# 2. 遍历所有vehicle节点定位目标
for vehicle in root.findall("vehicle"):
    # 获取registration_no的文本,去除前后空白避免空格干扰匹配
    reg_no = vehicle.find("registration_no").text.strip()
    if reg_no == "DE2115":
        # 更新make和model节点的文本值,可替换为你需要的实际值
        vehicle.find("make").text = "Nissan"
        vehicle.find("model").text = "X-Trail"
        break  # 唯一目标匹配完成后直接退出循环,减少不必要遍历

# 3. 将修改写回原文件
tree.write("motorvehicles.xml", encoding="utf-8", xml_declaration=True)

如果你偏好直接用XPath定位目标节点,注意子元素值筛选的语法和属性筛选不同,且要匹配原XML中带空格的文本内容,写法如下(仅适配Python 3.7及以上版本):

# 注意XPath中DE2115前后的空格和原XML保持一致
target_vehicle = root.find("./vehicle[registration_no=' DE2115 ']")
if target_vehicle is not None:
    target_vehicle.find("make").text = "Nissan"
    target_vehicle.find("model").text = "X-Trail"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:18:26