您的位置:首页 > 编程语言 > Python开发

python操作XML

2016-09-09 12:15 225 查看
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')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: