python怎么解析xml文件

Python09

python怎么解析xml文件,第1张

python对XML的解析

常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。

python有三种方法解析XML,SAX,DOM,以及ElementTree:

1.SAX (simple API for XML )

python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

2.DOM(Document Object Model)

将XML数据在内存中解析成一个树,通过对树的操作来操作XML。

3.ElementTree(元素树)

ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。

SAX是一种基于事件驱动的API,利用SAX解析XML牵扯到两个部分,解析器和事件处理器。其中解析器负责读取XML文档,并向事件处理器发送事件;事件处理器负责做出响应,对处理的XML数据进行处理。

常用情况:

1.对大型文件进行处理

2.只需要文件的部分内容,或者只需要从文件中得到特定信息

3.想建立自己的对象模型

文档启动的时候调用

文档解析结束后调用

遇到XML开始标签时调用,name是标签的名字,attrs是标签的属性值字典,例如<user name='MoonMonster'>,那么便可使用attrs['name']来获取name的值。

遇到XML结束标签时调用,name是结束标签的名称

包含在标签中的值,content就是被包含的值

如果只是需要从文档中把所有的数据都读取出来,那么直接从character()函数中保存content数据即可,然后在endElement()函数中存储。需要注意的是,这种写法需要将没有直接内容的标签排除掉,例如movie标签,不然会出现没有数据的标签出现数据的情况。还有一点需要注意,如果标签中的数据换行了,会带来很多意料之外的情况,像下面这种。

或者参照网上其他人的写法:

在这个例子中,使用了self.CurrentData来保存当前标签,但有一个坑的地方是,在endElement函数中,无法获取到像movie这种标签的结束标签。