ET简介

xml.etree.ElementTree(简称ET)模块提供了一个轻量级、Pythonic的API,同时还有一个高效的C语言实现,即xml.etree.cElementTree。与DOM相比,ET的速度更快,API使用更直接、方便。与SAX相比,ET.iterparse函数同样提供了按需解析的功能,不会一次性在内存中读入整个文档。ET的性能与SAX模块大致相仿,但是它的API更加高层次,用户使用起来更加便捷。

笔者建议,在使用Python进行XML解析时,首选使用ET模块,除非你有其他特别的需求,可能需要另外的模块来满足。

解析XML的这几种API并不是Python独创的,Python也是通过借鉴其他语言或者直接从其他语言引入进来的。例如expat就是一个用C语言开发的、用来解析XML文档的开发库。而SAX最初是由DavidMegginson采用java语言开发的,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构,可以应用于任何编程语言。
下面,我们以ElementTree模块为例,介绍在Python中如何解析lxml。

基本使用方法:

由于我日常只需用到简单的提取并统计xml中特定标签的用法。下面简单介绍:

def parse_obj(xml_path,filename,ID):
"""xml文件批量统计,找到xml文件中指定的tag并匹配
xml_path:xml文件夹的路径,
filename:xml文件名
ID:你指定统计的tag名
return:返回此tag数组
"""
tree = ET.parse(xml_path + '\\' + filename)
object = []
for obj in tree.findall('object') # 此xml文件的一级包裹标签名
obj_struct = {}
obj_struct[ID] = obj.finnd(ID).text
objects.append(obj_struct)
return objects