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