使用xml.etree.ElementTree模块来解析XML文件。
ElementTree模块中提供了两个类用来完成这个目的:
- ElementTree表示整个XML文件(一个树形结构)
- Element表示树中的一个元素(结点)
导入ElementTree模块:
import xml.etree.ElementTree as ET
导入parse解析器:
from xml.etree.ElementTree import parse
首先需要打开一个xml文件,本地文件使用open函数,如果是互联网文件,则使用urlopen:
f = open('migapp.xml', 'rt', encoding='utf-8')
# 或者 open('migapp.xml', 'rt', encoding='utf-8',error='ignore')
然后对XML进行解析:
xml文件:此处的xml文件我有删除,与下边的coding并不对应。
coding:
#解析根元素
tree = ET.parse(data)
root = tree.getroot()
print('root.tag =', root.tag)
print('root.attrib =', root.attrib)
# 解析根子部分
for child in root: # 仅可以解析出root的儿子,不能解析出root的子孙
print(child.tag)
print(child.attrib) # attrib is a dict
# 通过索引解析根的子孙
print(root[0][0].tag)
print(root[0][0].text)
# 完整练习
data = open(filepath, 'rt', encoding='utf-8',errors='replace')
tree = ET.parse(data)
root = tree.getroot()
text_list =[] #return
for element in root.findall('Award'):
text_list.append(element.find(columns[0]).text)
text_list.append(element.find(columns[1]).text[6:])
text_list.append(element.find(columns[2]).text)
text_list.append(element.find(columns[3])[0].text)
text_list.append(element.find(columns[4])[2][0].text)
text_list.append(element.find(columns[5]).text)
text_list.append(element.find(columns[6])[0].text)
data.close()# 记得关闭流
总结:
1、由根root出发findall,进而find某个属性,进而通过[][]方式获取子部
2、不知道tag名称的情况下,可以通过tag获取标签名,text获取值
尊重劳动成果:https://my.oschina.net/u/1462678/blog/896922