在Python(以及其他编程语言)内有两种常见的方法处理XML:SAX(Simple API for XML)和DOM(Document Object Model,文档对象模型)。SAX语法分析器读取XML文件并且告知它发现的内容(文本,标签和特性)。由于它一次只村文档的一小部分,所以SAX简单,快速并能有效利用内存。DOM走的则是另外一条路:它构造一个表示整个文档的数据结构(文档树)。这样会慢些并且需要更多内存,但如果希望操作整个文档结构的话则很有用。
cml.dom.minidom(简化的DOM)和xml.dom.pulldom(SAX和DOM的结合体,减少了内存需求)。
pyRXP(https://bitbucket.org/rptlab/pyrxp) 是个快速且简单的XML语法分析器(它并不使用DOM,但是会从XML文档中建立完整的文档树)。ElementTree (http://effbot.org/zone/elementtree.htm)则更加灵活易用。
我们使用Python内置的SAX进行解析.
SAX不用将整个文档加载到内存,基于事件驱动的API(Observer模式),用户只需要注册自己感兴趣的事件即可。在使用SAX进行解析时,有很多事件类型可用,但是这里只用到3个:元素的开始(开始标签的匹配项),元素的结束(关闭标签的匹配项)以及纯文本(字符)。要解析XML文件,可使用xml.sax模块的parse函数。这个函数负责读取文件并且生成时间——由于它要生成这3类事件,所以要调用一些事件处理程序。这些处理程序会作为内容处理程序(content handler)对象的方法来实现。需要继承 xml.sax.handler 中的 ContentHandler 类,因外它实现了所有需要的事件处理程序(只不过是没有任何效果的伪操作),可以在需要的时候覆盖这些函数。
下面是一个xml文件 website.xml
1 <?xml version="1.0" encoding="utf-8"?&g