Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2441748
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: Python/Ruby

2013-06-16 21:20:24

PyXML(SAX)是python中的一个XML工具集,里面包括有很多处理XML文档的程序,如PySAX,Expat和xmlproc等。Python通过该套工具能很好地处理xml文档,

Chapter 1. SAX分析器

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文档的示例。
  1. #!/usr/bin/python
  2. #-*- encoding:utf-8 -*-
  3. #import xml.sax.handler
  4. #class myhandler(xml.sax.handler.ContentHandler):
  5. from xml.sax import make_parser
  6. from xml.sax import ContentHandler
  7. import string
  8. class MyHandler(ContentHandler):
  9.         isHi=""
  10.         hi=""
  11.         def startElement(self,name,attrs): #遇到元素开头时执行,如<para>
  12.                 if name=="hi":
  13.                         self.isHi=1
  14.         def endElement(self,name): #遇到元素尾时执行,如</para>
  15.                 if name=="hi":
  16.                         self.isHi=""
  17.         def characters(self,content): #获取元素内容
  18.                 if self.isHi:
  19.                         self.hi+=content
  20. ch = MyHandler() #生成ContentHandler的实例
  21. saxparser = make_parser() #创建sax处理器
  22. saxparser.setContentHandler(ch) #关联sax处理器与ContentHandler实例
  23. saxparser.parse('weather.xml') #处理weather.xml文档
  24. print "hi:",ch.hi #打印ch.hi的值

转载自:
阅读(3015) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~