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

如何使用Python修改XML子节点内容,替换用户名密码并保留原有结构

解决方案

你现有的代码只完成了节点查找,缺少给节点文本赋值的逻辑,同时ElementTree默认写入参数会破坏原XML结构,按以下内容修正即可:

核心修改点

  • 找到目标节点后直接给.text属性赋值完成内容替换
  • 写入文件时配置对应参数保留原XML的声明、编码、缩进结构

完整修正代码

import xml.etree.ElementTree as ET

mytree = ET.parse('project/config.xml')
myroot = mytree.getroot()

# ... 你的其他业务逻辑
username = self.username.text()
password = self.password.text()

if self.rmbCheckBox.checkState() == Qt.Checked:
    # 遍历所有User节点(如果只有单个User节点可以直接用myroot.find('User'),不需要循环)
    for user_node in myroot.findall('User'):
        # 修改用户名
        un_node = user_node.find('Username')
        if un_node is not None:
            un_node.text = username
        # 修改密码
        pwd_node = user_node.find('Password')
        if pwd_node is not None:
            pwd_node.text = password
        # 可选:同步修改Remember节点存储勾选状态
        remember_node = user_node.find('Remember')
        if remember_node is not None:
            remember_node.text = "1"

# Python 3.9及以上版本内置indent方法,保留原有缩进格式
ET.indent(mytree, space="    ", level=0)
# 写入文件,指定编码、开启XML声明匹配原文件格式
# 要覆盖原config.xml就把路径改回'project/config.xml',你原代码默认是输出到新的user.xml文件
mytree.write('project/config.xml', encoding='UTF-8', xml_declaration=True, short_empty_elements=False)

注意事项

  • XML标签大小写敏感,查找节点时标签名要和原文件完全一致
  • 如果你使用的Python版本低于3.9,没有ET.indent方法,可以安装第三方库lxml替换标准库的ElementTree,lxml默认会保留原有缩进结构
  • 原文件是XML 1.1版本,标准库ElementTree默认输出XML 1.0声明,如果必须保留1.1版本,可以在写入后手动替换声明行,或者直接使用lxml库处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:06:03