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处理过程的图片。
