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,会让这段字符串被当作普通文本处理,最终被转义成<view...>,而非创建真正的<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
相关产品推荐
相关产品推荐

