python操作XML

来源:互联网 发布:天刀离玉堂捏脸数据 编辑:程序博客网 时间:2024/05/29 02:46

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)  #dataprint(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')



1 0
原创粉丝点击