python ElementTree操作xml节点
python ElementTree操作xml节点,包括增删改查
xml原文
<Voucher> <Id>967a198783d14835860574c697478156</Id> <Remark>main摘要443344245567583384475</Remark> <Delete>需要删除的节点1</Delete> <DetailList> <Detail> <Id>f0bfdbad7de14d1386c6f7fee6c9fa66</Id> <Remark>摘要443344245567583384475</Remark> <Delete>需要删除的节点2</Delete> </Detail> <Detail> <Id>6f9a8722e78f455b953ac20161736499</Id> <Remark>摘要8476127329416243421762023</Remark> <Delete>需要删除的节点3</Delete> </Detail> </DetailList> </Voucher>
要求对这个xml 进行如下操作:
修改Voucher/Remark、Voucher/DetailList/Detail/Remark值,在原有值后面后面增加2023
增加Voucher/AdmDivCode、Voucher/DetailList/Detail/AdmDivCode,值为440300000
删除节点:Voucher/Delete、Voucher/DetailList/Detail/Delete
增加Voucher/AdmDivCode、Voucher/DetailList/Detail/AdmDivCode,值为440300000
删除节点:Voucher/Delete、Voucher/DetailList/Detail/Delete
import xml.etree.ElementTree as ET """ 修改Voucher/Remark、Voucher/DetailList/Detail/Remark值,在原有值后面后面增加2023 增加Voucher/AdmDivCode、Voucher/DetailList/Detail/AdmDivCode,值为440300000 删除节点:Voucher/Delete、Voucher/DetailList/Detail/Delete """ # 创建XML字符串 xml_data = """<Voucher> <Id>967a198783d14835860574c697478156</Id> <Remark>main摘要443344245567583384475</Remark> <Delete>需要删除的节点1</Delete> <DetailList> <Detail> <Id>f0bfdbad7de14d1386c6f7fee6c9fa66</Id> <Remark>摘要443344245567583384475</Remark> <Delete>需要删除的节点2</Delete> </Detail> <Detail> <Id>6f9a8722e78f455b953ac20161736499</Id> <Remark>摘要8476127329416243421762023</Remark> <Delete>需要删除的节点3</Delete> </Detail> </DetailList> </Voucher> """ # 解析XML,root的tag就是根节点Voucher root = ET.fromstring(xml_data) # 修改Voucher/Remark值 voucher_remark = root.find('Remark') voucher_remark.text += '=====2023' # 修改Voucher/DetailList/Remark值 for detail in root.findall('.//Detail/Remark'): detail.text += '=====2023' # 一次性批量修改 for node in root.findall(".//Remark"): node.text += '=====2023+++++' # 添加Voucher/AdmDivCode adm_div_code = ET.Element('AdmDivCode') adm_div_code.text = '440300000++++++' root.append(adm_div_code) # 添加Voucher/DetailList/AdmDivCode for detail in root.findall('.//Detail'): adm_div_code = ET.Element('AdmDivCode') adm_div_code.text = '440300000===' detail.append(adm_div_code) #删除根目录下节点Delete :Voucher/Delete delete_element = root.find('Delete') root.remove(delete_element) # 删除Voucher/DetailList/Detail目录下Delete for detail in root.findall(".//DetailList/Detail"): # 删除只有先进入父目录,在以父目录身份删除子节点 for node in detail.findall("Delete"): detail.remove(node) # 将修改后的XML转换为字符串并打印 modified_xml = ET.tostring(root, encoding='utf-8').decode() print(modified_xml)
执行结果如下,增删该都成功了
<Voucher> <Id>967a198783d14835860574c697478156</Id> <Remark>main摘要443344245567583384475=====2023=====2023+++++</Remark> <DetailList> <Detail> <Id>f0bfdbad7de14d1386c6f7fee6c9fa66</Id> <Remark>摘要443344245567583384475=====2023=====2023+++++</Remark> <AdmDivCode>440300000===</AdmDivCode></Detail> <Detail> <Id>6f9a8722e78f455b953ac20161736499</Id> <Remark>摘要8476127329416243421762023=====2023=====2023+++++</Remark> <AdmDivCode>440300000===</AdmDivCode></Detail> </DetailList> <AdmDivCode>440300000++++++</AdmDivCode></Voucher>
xml 操作模块ElementTree说明文档:https://docs.python.org/3/library/xml.etree.elementtree.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-11-08 python3 + flask + sqlalchemy +orm(2):数据库中添加表