可爱的 Python:将 XML 和 Python结合起来
2007-03-29 12:03:13 来源:WEB开发网核心提示: “SAX(XML 的简单 API)是 XML 语法分析器的公用语法分析器接口,它允许应用程序作者编写使用 XML 语法分析器的应用程序,可爱的 Python:将 XML 和 Python结合起来(5),但是它却独立于所使用的语法分析器,(将它看作 XML 的 JDBC,因为这个
“SAX(XML 的简单 API)是 XML 语法分析器的公用语法分析器接口。它允许应用程序作者编写使用 XML 语法分析器的应用程序,但是它却独立于所使用的语法分析器。(将它看作 XML 的 JDBC。)”
-- Lars Marius Garshol, SAX for Python(请参阅 参考资料)
SAX -- 如同它提供的语法分析器模块的 API -- 基本上是一个 XML 文档的顺序处理器。使用它的方法与 [xmllib] 示例极其相似,但更加抽象。定义语法分析器类,应用程序员将定义一个 'handler' 类,该类将注册所使用的语法分析器。必须定义四个 SAX 接口(每个接口都有几个方法):DocumentHandler、DTDHandler、EntityResolver 和 ErrorHandler。已提供了所有这些接口的基类,但大多数情况下,最简单的方法是继承 'HandlerBase',因为这个类继承了所有四个接口。可以不用考虑想要做什么。某些代码将帮助解释这一点;该样本执行与 [xmllib] 示例相同的任务。
尝试 SAX 的样本代码
#--------------------- try_sax.py ----------------------#
import string
from xml.sax import saxlib, saxexts
class QuotationHandler(saxlib.HandlerBase):
"""Crude sax extractor for quotations.dtd document"""
def __init__(self):
self.in_quote = 0
self.thisquote = ''
def startDocument(self):
print '--- Begin Document ---'
def startElement(self, name, attrs):
if name == 'quotation':
print 'QUOTATION:'
self.in_quote = 1
else:
self.thisquote = self.thisquote + '{'
def endElement(self, name):
if name == 'quotation':
print string.join(string.split(self.thisquote[:230]))+'...',
print '('+str(len(self.thisquote))+' bytes)
'
self.thisquote = ''
self.in_quote = 0
else:
self.thisquote = self.thisquote + '}'
def characters(self, ch, start, length):
if self.in_quote:
self.thisquote = self.thisquote + ch[start:start+length]
if __name__ == '__main__':
parser = saxexts.XMLParserFactory.make_parser()
handler = QuotationHandler()
parser.setDocumentHandler(handler)
parser.parseFile(open("sample.xml"))
parser.close()
更多精彩
赞助商链接