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

Python中向XML文件追加元素无报错但未更新问题求助

问题描述

原始XML文件内容:

<data>
   
    <Views>
        <view viewname="Request Info" Queryname="Gooo"/>
        <view viewname="To Do" Queryname="For later"/>
    </Views>
</data>

想要实现的目标XML结构:

<data>
    <Views>
        <view viewname="Request Info" Queryname="Gooo"/>
        <view viewname="To Do" Queryname="For later"/>
       <view viewname="Request Info222" Queryname="Gooo"/>
    </Views>
</data>

使用的Python代码:

from xml.etree import ElementTree as ET

tree = ET.parse('C:\Python_Projects\Jira_Rest\hest.xml')
root = tree.getroot()

for item in root.findall('Views'):
   
    new = ET.SubElement(item, 'View')
    new.text = '<view viewname="Request Info222" Queryname="Gooo"/>'

代码运行无报错,但XML文件未更新,请问问题出在哪里?

问题分析与解决

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

  • 未保存修改后的XML树:ElementTree修改内存中的树之后,必须调用tree.write()方法才能将改动写入文件,否则所有修改只停留在内存里,不会影响原文件。
  • 错误的子元素创建方式:直接把XML标签字符串赋值给new.text,会让这段字符串被当作普通文本处理,最终被转义成&lt;view...&gt;,而非创建真正的<view>节点。正确做法是直接创建<view>子元素并设置属性。
  • 节点名称大小写不匹配:原XML和目标结构里的节点是小写<view>,但代码里创建的是大写<View>,会生成不符合要求的节点。

修正后的代码如下:

from xml.etree import ElementTree as ET

# 路径用原始字符串避免转义问题
tree = ET.parse(r'C:\Python_Projects\Jira_Rest\hest.xml')
root = tree.getroot()

for item in root.findall('Views'):
    # 创建正确的<view>子元素
    new_view = ET.SubElement(item, 'view')
    # 设置对应属性
    new_view.set('viewname', 'Request Info222')
    new_view.set('Queryname', 'Gooo')

# 将修改后的树写入文件,指定编码确保输出正确
tree.write(r'C:\Python_Projects\Jira_Rest\hest.xml', encoding='utf-8', xml_declaration=True)

补充:路径中的单反斜杠可能被Python解析为转义字符,建议用原始字符串(前缀加r)或者双反斜杠规避问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:01:15