背景
Python有三种方法解析xml:SAX,DOM,Elementree。本文记录ElementTree方法解析xml。
目前自己用的是Python3.6,但在该版本中并没有xml的缩进函数ET.indent,不过就我所知3.9版本是有的,所以当前3.6写出来的xml是无法调用函数来美化xml排版,文中的xml排版是手动挡 :)。当然,也可以写个函数来自动优化。
正文
xml是一种固有的分层数据格式,最好的描述方式就是使用树形结构。在ElementTree模块中,使用ElementTree对象来表示一棵树,Element对象来表示树中的一个单一结点。读取、写入一个xml文件一般都是在ElementTree层面上操作,而对xml元素(结点)及其子元素(子结点)的操作是在Element层面上进行。
说明:下面的内容有时候使用明确的node名称来代替Element进行操作,有时候使用Element泛指一个结点。ElementTree和Element是一个类,创建一棵树tree或者一个结点node相当于类的实例化。
解析xml文件
import xml.etree.ElementTree as ET # 导入ElementTree模块
tree = ET.parse(xml_file_path) # 解析xml文件,得到树形结构
root = tree.getroot() # 获取根节点
结点基础:node.tag,node.attrib,node.get(),node.text
每个结点都有标签(tag)和属性(attrib),标签名一般不为空,属性可为空,比如:
<data, attrib=[]>
<daughter_node, name="child_1", age="20">
<chichild_node>
...
</chichild_node>
</daughter_node>
...
<daughter_node>2021</daughter_node>
<son_node>