使用xml模块需先引入模块名:
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.ElementTree as ET #ET是xml模块的别名
ET 模块可以归纳为三个部分:
1、ElementTree将整个XML文档表示为树,并 Element表示此树中的单个节点。与整个文档的交互(读取和写入文件)通常在ElementTree关卡上完成。
2、与单个XML元素及其子元素的交互在该Element级别上完成。
3、以及一些操作 XML 的函数。
可以使用 ET 模块的parse()函数来从指定的 XML 文件构造一个ElementTree对象:
# 获取 XML 文档对象 ElementTree
tree = ET.parse('test.xml') # <xml.etree.ElementTree.ElementTree object at 0x00000000021CCA20>
# 获取 XML 文档对象的根结点 Element
root = tree.getroot() # 获取根节点 <Element 'data' at 0x0000000002110368>
# 打印根节点的名称;获取标签名
print(root.tag) # tag函数用来打印根节点名称
标签分自闭合标签和非自闭合标签:
<year>2008</year> 非自闭合标签
<neighbor name="Austria" direction="E"/> 自闭合标签
例如:<APP_KEY channel = 'CSDN'> hello123456789 </APP_KEY>
tag 即标签,用于标识该元素表示哪种数据,即APP_KEY
attrib 即属性,用Dictionary形式保存,即{'channel' = 'CSDN'}
text 文本字符串,可以用来存储一些数据,即hello123456789
data 是根节点
conuntry 是子节点;每个子节点有自己的标签、属性、文本字符串
获取标签名:
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.cElementTree as ET
tree=ET.parse('test')
root=tree.getroot()
for i in root:
for j in i:
print(j.tag)
获取标签属性:
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.cElementTree as ET
tree=ET.parse('test')
root=tree.getroot()
for i in root:
print(i.attrib)
获取子节点标签名:
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.cElementTree as ET
tree=ET.parse('test')
root=tree.getroot()
for i in root:
for j in i:
print(j.tag)
获取子节点属性:
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.cElementTree as ET
tree=ET.parse('test')
root=tree.getroot()
for i in root:
for j in i:
print(j.attrib)
获取子节点文本:
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.cElementTree as ET
tree=ET.parse('test')
root=tree.getroot()
for i in root:
for j in i:
print(j.text)
iter()函数指定过滤出某一个tag(标签):
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.cElementTree as ET
tree=ET.parse('test')
root=tree.getroot()
for i in root.iter('year'): # 从“根”节点开始查找
print(i.tag,i.text)
以上实例输出结果:
year 2008
year 2011
year 2011
set()函数新增属性
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.cElementTree as ET
tree=ET.parse('test')
root=tree.getroot()
for i in root.iter('year'):
new_year=int(i.text)+1
i.text=str(new_year) #更新文本信息
i.set("updated","yes") # 更新/添加 属性
tree.write('abc.xml') #从新写入到新的文件中
del删除标签属性
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.ElementTree as ET
tree=ET.parse('abc.xml')
root=tree.getroot()
for i in root.iter('year'):
del i.attrib['updated']
tree.write('abc.xml')
remove删除整个子节点
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import xml.etree.ElementTree as ET
tree=ET.parse('abc.xml')
root=tree.getroot()
for i in root.iter('country'): #这里必须写子节点名称,因为下面的root.remove删除的时候会引用
x=int(i.find('rank').text)
if x>=50:
root.remove(i) #删除整个节点
tree.write('yedong.xml')