如何用Python修改XML文件根节点下指定元素的文本值?
实现XML元素值的更新与保存
要更新WriteIM1.xml中root_IM1[1][2].text的取值,只需两步:直接修改目标元素的.text属性,再将修改后的XML树写入文件即可。具体实现如下:
核心修改步骤
- 修改元素文本值:将新序列号赋值给目标元素的
.text属性(注意要转为字符串类型,因为XML元素的文本内容是字符串格式) - 保存修改后的XML:调用ElementTree的
write()方法,将更新后的内容写入目标文件,同时指定编码和XML声明以保证格式正确。
修正后的完整代码
# Import File Path Verification import os import sys import time from pathlib import Path import shutil # XML import xml.etree.ElementTree as ET # Shell Command import subprocess # Enter Serial No. 注意:0开头的数字在Python中会被解析为八进制,改为字符串避免报错 NAC_Ser = "012345678" # Check Folder Structure # 修正路径字符串的语法错误(多余的括号) NAC_FilePath = Path(f"C:\\Folder\\{NAC_Ser}") folp1_2 = Path(f"C:\\Folder\\{NAC_Ser}\\Folder1") folp2_2 = Path(f"C:\\Folder\\{NAC_Ser}\\Folder1\\Folder2_1") folp3_2 = Path(f"C:\\Folder\\{NAC_Ser}\\Folder1\\Folder2_2") if NAC_FilePath.exists() and folp1_2.exists() and folp2_2.exists() and folp3_2.exists(): print("\nFolder Check Passed\n") else: print("\nFailed Folder Check") # Check File Exist fp1_2 = Path(f"C:\\Folder\\{NAC_Ser}\\Folder1\\Folder2_1\\ReadIm1.xml") if fp1_2.exists(): print("File Check Passed\n") print("XML File Imported\n") else: print("Failed File Check") # Copy Read Files to Write Files print("\nCreating Write XML Files...") print("\nSource FilePath to Copy:") print(fp1_2) print("\nNew Destination FilePath & New FileName:") dest_fp1 = Path(f"C:\\Folder\\{NAC_Ser}\\Folder1\\Folder2_1\\WriteIM1.xml") print(dest_fp1) shutil.copy2(fp1_2, dest_fp1) # Copy the file # XML Query & Update tree_IM1 = ET.parse(dest_fp1) root_IM1 = tree_IM1.getroot() # 获取当前序列号 IM1_IIBSerial = root_IM1[1][2].text print(f"Current IIB PCB Serial: {IM1_IIBSerial}") # 新序列号 IM1_IIBSerial_New = 12345 print(f"New IIB PCB Serial: {IM1_IIBSerial_New}") # 核心:更新目标元素的文本值 root_IM1[1][2].text = str(IM1_IIBSerial_New) # 保存修改后的XML文件,指定编码和XML声明 tree_IM1.write(dest_fp1, encoding='utf-8', xml_declaration=True) print("\nWriteIM1.xml has been updated successfully!")
额外说明
- 原代码中
NAC_Ser = 012345678会触发语法错误(Python 3中0开头的数字是无效八进制),已改为字符串类型。 - 路径字符串中的多余括号已修正,避免路径解析错误。
write()方法中添加encoding='utf-8'和xml_declaration=True,确保生成的XML文件编码正确且包含标准声明头。
内容的提问来源于stack exchange,提问作者M.Tomlinson
相关产品推荐
相关产品推荐

