前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python使用ElementTree解析xml

Python使用ElementTree解析xml

原创
作者头像
沈宥
发布2024-01-04 14:25:10
2160
发布2024-01-04 14:25:10
举报

ElementTree 是Python用来解析和处理 XML的标准库,它提供了轻量级的 Python 式的 API ,它由一个 C 实现来提供。

如何引入

ElementTree生来就是为了处理 XML ,它在 Python 标准库中有两种实现。一种是纯 Python 实现例如xml.etree.ElementTree,另外一种是速度快一点的xml.etree.cElementTree。 尽量使用 C 语言实现的那种,因为它速度更快,而且消耗的内存更少。

代码语言:javascript
复制
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET

XML 解析

🏁 xml示例🏁 :

代码语言:javascript
复制
<HotelReservations>
    <HotelReservation>
      <UniqueID ID="test20231703489561" />
      <RoomStays>
        <RoomStay>
                <Rate>
                  <Base BaseAmountOriginal="113.1" SaleAmountOriginal="377.0">
                    <PromotionInfo BaseDiscountAmount="188.5" PromotionId="1000000519" RuleId="188552516469001" SaleDiscountAmount="188.5" />
                    <PromotionInfo BaseDiscountAmount="75.4" PromotionId="1000000485" RuleId="222734520418530" SaleDiscountAmount="75.4" />
                  </Base>
                </Rate>
              </Rates>
            </RoomRate>
          </RoomRates>
        </RoomStay>
      </RoomStays>
      <ResGlobalInfo>
        <RoomNum num="desc">4</RoomNum>
      </ResGlobalInfo>
    </HotelReservation>
  </HotelReservations>
  1. 加载并解析指定XML
代码语言:javascript
复制
tree = ET.ElementTree(file=xml_file)
  1. 获取根节点
代码语言:javascript
复制
root = tree.getroot()
  1. 解析模块

属性

类型

描述

attrib

字典

元素下key-value模式的属性值

tag

字符串

元素存储的数据类型

text

字符串

元素的文本值

  1. 属性对应值
代码语言:javascript
复制
<RoomNum num="desc">4</RoomNum>
    tag    attrib  text  tag
  1. 修改值
代码语言:javascript
复制
ele.set('kye', new-vlue)
  1. 更新文件
代码语言:javascript
复制
tree.write(xml_file, xml_declaration=False)

实战应用

以上面的xml为例

  1. 修改唯一元素值:UniqueID的ID值
代码语言:javascript
复制
UniqueID = tree.iter('UniqueID')
for ele in UniqueID:
      ele.set('ID', 'test20240104')
  1. 遍历修改元素值:PromotionInfo的BaseDiscountAmount值
  •  🍀通过 iter() 方法来遍历所有元素,找到 PromotionInfo
代码语言:javascript
复制
PromotionInfo = tree.iter('PromotionInfo')
  •  🍀根据attrib属性,查找key,修改value值 iter(tag=None) 以当前元素为根节点,创建树迭代器
代码语言:javascript
复制
for ele in PromotionInfo:
	#attrib为字典类型
        attrib_dict = ele.attrib

        # 查找key,修改value
        if "300810237903009" in attrib_dict.values():
            ele.set('BaseDiscountAmount', '100')
            ele.set('SaleDiscountAmount', '100')
  1. 修改text值
代码语言:javascript
复制
RoomNumE = tree.iter('RoomNum')
    for ele in RoomNumE:
        ele.text = '2'

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何引入
  • XML 解析
  • 实战应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档