大纲:1. 解析XML文档
2. 获取XML中的元素
xml.etree.ElementTree XML操纵API
ElementTree库提供了一些工具,可以使用基于事件和基于文档的API来解析XML
1. 解析XML文档
已解析的XML文档在内存中由ElementTree和Element对象表示,这些对象基于XML文档中节点嵌套的方式按树结构互相连接。
用parse()解析一个完整的文档时,会返回一个ElementTree实例
country_data.xml:
1
2008
141100
4
2011
59900
68
2011
13600
要解析这个文档,需要向parse()传递一个打开的文件句柄。
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
这个方法会读取数据、解析XML,并返回一个ElementTree对象。
作为一个元素,root有一个标签和一个属性字典:
>>> root.tag
'data'
>>> root.attrib
{}
它也有子节点,我们可以迭代
for child in root:
print(child.tag, child.attrib)country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}
孩子节点是嵌套的,我们可以通过索引访问特定的子节点:
>>> root[0][1].text
'2008'
2. 获取XML中的元素
Element有一些有用的方法,可以帮助递归地遍历它下面的所有子树(它的子树,它们的子树,等等)
比如:Element.iter():
for neighbor in root.iter('neighbor'):
print(neighbor.attrib){'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}Element.findall(): 找到带有标签的元素,该标签是当前元素的直接子元素
Element.find() : 找到第一个带有特定标签的子元素。
Element.text: 访问标签的内容
Element.get():访问标签的属性值
for country in root.findall('country'):
rank = country.find('rank').text
name = country.get('name')
print(rank, name)1 Liechtenstein
4 Singapore
68 Panama
参考: