加载元素树模块
Python标准库中,提供了元素树的两种实现。一个是纯Python实现的xml.etree.ElementTree
,另一个是速度更快的C语言实现xml.etree.cElementTree
。
因为C语言实现的元素树,它的速度要快很多,而且内存消耗也要少很多。所以在加载模块时先尝试去载入C语言实现的,没有再去用Python实现的元素树。
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
打开XML文档并解析为树
调用parse()
方法,返回解析树。调用树的方法getroot()
可以获取树的根节点。
tree = ET.parse("kun.xml") # 将xml解析为树
root = tree.getroot() # 获取根节点
查找节点
xml示例:
<?xml version="1.0" encoding="UTF-8"?>
<kun>
<students>
<student>
<name>张三</name>
<age>18</age>
<score>89</score>
</student>
<student>
<name>李四</name>
<age>19</age>
<score>81</score>
</student>
<student>
<name>王五</name>
<age>17</age>
<score>92</score>
</student>
</students>
</kun>
使用Element.iter()
查找
Element.iter()
会将节点中的子节点和孙节点都遍历一遍。
for student in root.iter('student'):
print student[0].text # 打印名字
输出结果:
张三
李四
王五
使用Element.findall()
查找
Element.findall()
只会将节点中的子节点遍历一遍,不会查找孙节点。查找孙节点时可以使用下列方法:
students = root.find('students')
for element in students.findall('student'):
name = element.find('name').text
print name
输出结果:
张三
李四
王五
修改节点
通过一下函数进行修改:
方法 | 功能 |
---|---|
Element.text = '' | 直接改变字段内容 |
Element.append(Element) | 为当前的Elment对象添加子对象 |
Element.remove(Element) | 删除Element节点 |
Element.set(key, value) | 添加和修改属性 |
ElementTree.Element() | 构建一个节点 |
ElementTree.SubElement(Element,tag) | 构建一个子节点 |
保存XML
调用树的方法write()
保存更新XML文件:
# 以UTF-8的格式保存
tree.write('kun.xml', 'UTF-8')
更多详细用法请查看官方资料:https://docs.python.org/zh-cn/3/library/xml.etree.elementtree.html