python操作XML

XML是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下:

<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year age="25">2033</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year age="25">2036</year>
        <gdppc>59900</gdppc>
        <neighbor direction="N" name="Malaysia" />
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year age="25" type="date">2036</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
    </country>
</data>
我们创建操作XMl对象有2种创建方法 如下

# -*- coding: utf-8 -*-

from xml.etree import  ElementTree as ET

#打开文件 读取XML内容   第一种创建方法
str_xml= open('data.xml','r').read()
#将字符串解析成xml特殊对象,root代指xml文件的根节点
root = ET.XML(str_xml)  #data
print(root)   #返回一个对象
#输出 <Element 'data' at 0x1006feb50>


# 第二种创建方法
# 直接解析xml文件
tree = ET.parse('data.xml')
#获取xml文件的根节点
root = tree.getroot()
print(root) 
#输出 <Element 'data' at 0x101821650>
我们可以查看data.xml所有的节点

#便利所有的子节点
for child in root:
    #第二层
    print(child.tag,child.attrib)  #输出一个元组
    #对第二层节点下面的子节点进行便利
    for i in child:
        print(i.tag,i.attrib)

获取指定的节点
#获取xml中的制定节点
for child in root.iter('year'):
    print(child.tag,child.attrib)

对XML中的操作一般是在内存中进行的,不会影响到文件中的内容,因此我们在内存中写完之后需要重新写入文件

#对xml文件进行操作 增删改查
for node in root.iter('year'):
    # 将year内容+10
    new_year = int(node.text)+10
    node.text = str(new_year)

    # 设置属性
    node.set('name','eric')
    node.set('age','25')

    #删除属性
    del node.attrib['age']

#保存到文件
tree = ET.ElementTree(root)
tree.write('data.xml',encoding='utf-8')


#删除节点
for country in root.findall('country'):
   # 获取每一个country节点下rank节点的内容
   rank =  int(country.find('rank').text)
   if rank > 50:
       root.remove(country)  #会删除掉  整个country节点和下面的内容
#保存到文件
tree = ET.ElementTree(root)
tree.write('data.xml',encoding='utf-8')



Python是一种优秀的编程语言,在实现解析XML文件的功能方面表现出色。要使用Python读取XML,需要先安装一个XML解析库。Python提供了三种内置的XML解析库:SAX,DOM和ElementTree。接下来,我们将简单介绍这些库的使用方法。 SAX全称是“Simple API for XML”,在Python中可通过import sax模块来调用。SAX是基于事件驱动的解析器,它不需要将整个XML文件加载到内存中,而是在解析的同时从文件中读取数据块,处理完后就释放。SAX解析器在碰到一个元素的开始和结束标签时,会触发事件,我们只需要实现相应事件的处理函数,就能获取到元素的内容和属性等信息。 DOM全称是“Document Object Model”,在Python中可通过import xml.dom.minidom模块来调用。DOM是将整个XML文件加载到内存中,再将它解析成一个树形结构,通过节点之间的关系来访问元素内容的方式。使用DOM方式解析XML文件,必须将整个XML文件加载到内存中,所以对于较大的XML文件,DOM方式并不是最适合的。 ElementTree全称是“xml.etree.ElementTree”,在Python中可通过import xml.etree.ElementTree模块来调用。ElementTree是一种轻量级的、以事件驱动的XML解析库,它不需要大量的内存,并且解析速度很快。使用ElementTree库的主要步骤是:将XML文件加载到内存中,将其转换成元素树,然后利用Element对象和ElementTree API就能实现对XML文件的解析和操作。 综上所述,Python读取XML的三种方法各有优缺点,在不同的场合下选择不同的解析方法会更加合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值