WEB开发网
开发学院软件开发Python 可爱的 Python:将 XML 和 Python结合起来 阅读

可爱的 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()

上一页  1 2 3 4 5 6  下一页

Tags:可爱 Python XML

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接