本文总结了在Python中主要的几种处理XML的方法:
- Element Tree
- SAX
- Dom
- 使用第三方类库如Amara 2.x, libxml2dom 等
Element Tree
Element Tree是Python 2.5引入的使用简单,快捷的处理方法, 也是Python标准类库推荐的处理XML的方法。
它使用树形节点的形式来读写XML。Element Tree是轻量级的DOM, 所以使用方便且耗资源少。
比如有以下XML文件: sample.xml
实例代码如下:
输出结果:
ID: 001 Name: John
ID: 002 Name: Bill
ID: 003 Name: Rex
id: 001
name: John
age: 25
phone: 12345
<user id="001">
<name>John</name>
<age>25</age>
<phone>9999</phone>
</user>
<users>
<user id="001">
<name>John</name>
<age>25</age>
<phone>9999</phone>
</user>
<user id="002">
<name>Bill</name>
<age>30</age>
<phone>54321</phone>
</user>
<user id="004"><name>jane</name><age>45</age><phone>00000</phone></user></users>
SAX
SAX处理效率较高,但只支持读文档无法修改,而且不能从文档中间开始读,只能从头读到尾。
SAX是事件驱动的,当读到xml节点开始和结尾时,调用相应的Handler函数。
例如以下代码处理相同的sample.xml:
输出结果:
start document
start element users
start element user
ID: 001
start element name
Name: John
end element name
start element age
end element age
start element phone
end element phone
end element user
start element user
ID: 002
start element name
Name: Bill
end element name
start element age
end element age
start element phone
end element phone
end element user
start element user
ID: 003
start element name
Name: Rex
end element name
start element age
end element age
start element phone
end element phone
end element user
end element users
end document
Dom
效率较低。但支持读写和查找。
例如:
输出结果:
ID: 001 Name: John
ID: 002 Name: Bill
ID: 003 Name: Rex
<user id="001">
<name>John</name>
<age>25</age>
<phone>12345</phone>
</user>
<user id="001">
<name>John</name>
<age>25</age>
<phone>9999</phone>
</user>
<?xml version="1.0" encoding="utf-8"?><users>
<user id="001">
<name>John</name>
<age>25</age>
<phone>9999</phone>
</user>
<user id="002">
<name>Bill</name>
<age>30</age>
<phone>54321</phone>
</user>
<user id="004"><name>jane</name><age>45</age><phone>00000</phone></user></users>