说明
Python 解析 XML 的方法有 SAX,DOM 以及 ElementTree 三种。
-
SAX (simple API for XML )
SAX 用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。 -
DOM (Document Object Model)
将 XML 数据在内存中解析成一个树,通过对树的操作来操作XML。它需要将 XML 数据映射到内存中的树,一是比较慢,二是比较耗内存。 -
ElementTree (元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
具体的说明可以看这里。个人觉得 DOM 比较好用,接下来我也就简单做个 DOM 方法解析 XML 的示例。
https://www.runoob.com/python/python-xml.html
XML解析
假设我们有 test.xml
文件如下。
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<info id="001">
<name>树</name>
<age>25</age>
</info>
<info id="002">
<name>小梅</name>
<age>23</age>
</info>
<info id="003">
<name>二猪</name>
<age>26</age>
</info>
</catalog>
获得标签的属性值、标签内数据方法。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import xml.dom.minidom
def ReadXml(_filename):
#打开xml文档
dom = xml.dom.minidom.parse(_filename)
#得到文档元素对象
root = dom.documentElement
# 获取标签属性
infos = root.getElementsByTagName('info')
for info in infos:
print (info.getAttribute("id"))
# 获取标签内容
names = root.getElementsByTagName('name')
for name in names:
print (name.firstChild.data)
if __name__ == '__main__':
ReadXml('test.xml')