Copyright © 2005,2006 本文遵从GNU 的自由文档许可证(Free Document License)的条款,欢迎转载、修改、散布。
发布时间:2005年01月11日
更新时间:2006年03月13日
Abstract
PyXML是python中的一个XML工具集,里面包括有很多处理XML文档的程序,如PySAX,Expat和xmlproc等。Python通过该套工具能很好地处理xml文档,为了在zope中使用xml文档,我开始了学习该套工具的旅程,快跟我来吧,一起感受XML的革命浪潮。
List of Tables
Table of Contents
XML简单API(SAX,Simple API for XML)是一个XML分析器的标准,基于事件驱动方式。
Table 1.1. ContentHandler类的方法
方法 | 描述 |
---|---|
startDocument() | 在文档开头触发 |
endDocument() | 在文档结尾触发 |
startElement(name,attrs) | 遇到开始元素时触发,name是元素名,attrs是元素属性字典 |
endElement(name) | 遇到结束元素时触发,name是元素名 |
startElementNS(name,qname,attrs) | 处理名字空间,遇到开始元素时触发,name是元素名,是一个元组,包含URI和本地名,如namespace:title返回(‘namespace','title')。qname是从XML中标识的原始元素名,attrs是元素属性字典。 |
endElementNS(name,qname) | 处理名字空间,遇到结尾元素时触发,name和qname的含义同上 |
characters(content) | 遇到字符数据时触发 |
processingInstruction(target,data) | 在标识处理指令时触发 |
skippedEntity(name) | 在跳过实体时触发 |
Table 1.2. DTDHandler类的方法
方法 | 描述 |
---|---|
notationDecl(name,publicId,systemId) | 注释声明触发 |
unparsedEntityDecl(name,publicId,systemId,ndata) | 非分析实体触发 |
Table 1.3. ErrorHandler类的方法
方法 | 描述 |
---|---|
error(exception) | 在分析器遇到可恢复错误时调用,默认情况下,这个方法通过SAXException类发出一个异常。 |
fatalError(exception) | 在分析器遇到致命错误时调用,调用该方法时,分析时停止 |
warning(exception) | 在分析器遇到警告时调用,返回后,分析器继续。 |
下面是一个使用python标准的xml.sax模块处理xml文档的示例。
#!/usr/bin/python #-*- encoding:utf-8 -*- from xml.sax import make_parser from xml.sax import ContentHandler import string class MyHandler(ContentHandler): isHi="" hi="" def startElement(self,name,attrs): #遇到元素开头时执行,如<para> if name=="hi": self.isHi=1 def endElement(self,name): #遇到元素尾时执行,如</para> if name=="hi": self.isHi="" def characters(self,content): #获取元素内容 if self.isHi: self.hi+=content ch = MyHandler() #生成ContentHandler的实例 saxparser = make_parser() #创建sax处理器 saxparser.setContentHandler(ch) #关联sax处理器与ContentHandler实例 saxparser.parse('weather.xml') #处理weather.xml文档 print "hi:",ch.hi #打印ch.hi的值
这里有一幅显示sax处理过程的图片。