首页 > 编程语言 >python ElementTree操作xml节点

python ElementTree操作xml节点

时间:2023-11-29 11:34:10浏览次数:40  
标签:xml python Detail Voucher 2023 ElementTree root DetailList

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

 

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

 



标签:xml,python,Detail,Voucher,2023,ElementTree,root,DetailList
From: https://blog.51cto.com/u_15317330/8613030

相关文章

  • Python高阶函数
     map#map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。reduce#reduce把一个函数作用在一个序列[x1,x2,x3,...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效......
  • 义无反顾马督工,Bert-vits2V210复刻马督工实践(Python3.10)
    Bert-vits2更新了版本V210,修正了日/英的bert对齐问题,效果进一步优化;对底模使用的数据进行优化和加量,减少finetune失败以及电音的可能性;日语bert更换了模型,完善了多语言推理。更多情报请参考Bert-vits2官网:https://github.com/fishaudio/Bert-VITS2/releases/tag/2.1最近的事......
  • Java开发者的Python快速进修指南:实战之跳表pro版本
    之前我们讲解了简易版的跳表,我希望你能亲自动手实现一个更完善的跳表,同时也可以尝试实现其他数据结构,例如动态数组或哈希表等。通过实践,我们能够发现自己在哪些方面还有所欠缺。这些方法只有在熟练掌握之后才会真正理解,就像我在编写代码的过程中,难免会忘记一些方法或如何声明属性......
  • python - requests上传文件MultipartEncoder
    1.requests_toolbelt先安装requests_toolbeltpipinstallrequests_toolbelt上传实例importrequestsfromrequests_toolbeltimportMultipartEncoderupload_url='https://your/upload/url'payload={'file':('test.jpg',open(&#......
  • Python汇总篇,200+Python标准库介绍(超全)
    关于Python标准库众所周知,Python是一个依赖强大的组件库完成对应功能的语言,为了便捷实现各项功能,前辈大牛们打造了多种多样的工具库公开提供给大众使用,而越来越多的库已经因为使用的广泛和普遍及其功能的强大,已经成为Python的标准库。时至今日,Python标准库已经非常庞大,所提供的组......
  • Python自带数据集加载和Pandas学习简图
    Python是一种强大的编程语言,它拥有丰富的工具库和功能,其中之一就是自带的数据集,这些数据集在Python中非常有用,可以用于机器学习、数据分析、科学研究等。使用Python数据集可以极大地简化项目开发过程。通过导入现有的数据集,我们可以更快地开始分析和建模,并且可以使用已经实现的算......
  • XML数字签名-Signature语法和签名算法[转]
    XML数字签名-Signature语法和签名算法 一段Demo:<ds:Signaturexmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><!--规范化的算法--><ds:CanonicalizationMethodAlgorithm="http://www.w3.org/TR/2001/RE......
  • python利用with语句分割长函数代码块的小技巧
    如果某个函数实现很长,有时候希望把函数分割成若干部分,并且可以折叠,执行时能够打印日志.可以采用下面的办法来实现:frommylogimportloggerimporttimeclassMyTask:def__init__(self,task:str)->None:self.task:str=taskself.start_time......
  • 关于Python类型注解的几个实用小技巧
    虽然python是动态类型语言,但是python3.5引入的类型注解特性却很有用.不但有助于源码阅读,而且在类型提示和代码自动补全上也很方便.但是它毕竟不是静态类型编译型语言,有一些特殊的情况,需要一些小技巧才能够处理.引用后面定义的类型由于python不是编译型语言,如果在前......
  • python变量 sys.path和import导入
    一前言:sys.path是一个重要的变量数据,在使用import导入包和模块时就会从sys.path里面去寻找包和模块二sys.path用python命令运行相关py文件或者目录时,会添加一些路径到sys.path的开头,还会添加环境变量到里面,看看官网的介绍有的时候添加的是工作目录,有的时候添加的是py文......