开始在 Python 中使用 XML 的一个主要要素是排列出所有可用模块的可比性能力。在他的新 Python 专栏“可爱的 Python”的第一部分中,David Mertz 简要描述了最流行和实用的关于 XML 的 Python 模块,并指出可以下载的单独模块以及可供阅读的参考资料。本文有助于确定哪些模块最适合特定任务。
在许多情况下,Python 是使用 XML 文档的理想语言。像 Perl、REBOL、REXX 和 TCL 一样,它是一种灵活的脚本语言,并且有强大的文本操作能力。而且,XML 文档除了编码大多数类型的文本文件(或流文件),通常还编码大量复杂的数据结构。文本处理中常见的“读取几行,并将它们与一些规则表达式比较”样式通常不能很好地适合对 XML 进行彻底语法分析和处理。幸好,Python(与大多数其它语言相比)不仅有直接处理复杂数据结构的方法(通常使用类和属性),还有许多 XML 相关的模块可以帮助语法分析、处理和生成 XML。
关于 XML,要记住一个总体概念:可以验证或非验证方式处理 XML 文档。在以前的处理类型中,读取 XML 文档之前,必须先读取“文档类型定义”(DTD)。这种情况下,处理将总体计算 XML 文档的简单句型规则,还将计算 DTD 的特定语法约束。大多数情况下,使用非验证处理就可以了(通常运行更快,更适合程序) -- 我们相信文档创建者遵循文档范围的规则。在下面讨论的大多数模块都是非验证型;如果存在验证选项,则描述将指出。
中心资源库 (Vaults of Parnassus)(请参阅 参考资料)最近已成为查找 Python 资源的标准方法。可以在那个站点上找到所有以下讨论的模块(通过链接到各自模块所有者的站点)。特别地,可以在资源库中找到 PyXML 发行版,它是 tar 文件和 Win32 形式的安装程序。
Python 的 XML 特殊兴趣组 (XML-SIG)
XML-SIG 的成员执行了许多 -- 或大部分 -- 维护 Python 一部分 XML 工具的任务。与其它 Python SIG 一样,XML-SIG 要维护邮件发送列表、列表档案、有用的参考大权、文档、标准包和其它资源。阅读了本文中的概述后,最好从 XML-SIG Web 页面入手。
根据本文中讲述的特定重点,XML-SIG 维护了 PyXML 发行版。这个包包含了许多本文中讨论的模块,一些“入门”文档,一些演示代码和其它一些 XML-SIG 决定放入该发行版的东西。给定的包也许不会总是包含每个独立模块或工具的最新版本,但下载 PyXML 发行版是个好主意。以后,可以随时添加任何未包含的模块,或者已包含模块的新版本(以及许多 PyXML 发行版提供的服务所未包含的模块)。
模块:XMLLIB 模块(标准)
“不包括在标准发行版中”,Python 1.5.* 带有模块 [xmllib]。Python 1.6 也许结合了更多 XML-SIG 的成就,但它仍是测试版。[xmllib] 是一个非验证的低级语法分析器。[xmllib] 的工作方式是用应用程序覆盖 XMLParser 类,并提供处理文档元素(如特定或类属标记,或字符实体)的方法。
作为正在使用的 [xmllib] 示例,PyXML 发行版包括一个叫做 'quotations.dtd' 的 DTD,以及这个 DTD 的文档 'sample.xml'(请参阅 参考资料,以获取本文中提到的文件的档案文件)。以下的代码显示了 'sample.xml' 中每段引言的前几行,并生成了非常简单的未知标记和实体的 ASCII 指示符。经过分析的文本作为连续流来处理,所使用的任何累加器都由程序员负责(如标记中的字符串 (#PCDATA),或所遇到的标记的列表/词典)。
尝试 xmllib 的代码
#-------------------- try_xmllib.py --------------------# import xmllib, string class QuotationParser(xmllib.XMLParser): """Crude xmllib extractor for quotations.dtd document""" def __init__(self): xmllib.XMLParser.__init__(self) self.thisquote = '' # quotation accumulator def handle_data(self, data): self.thisquote = self.thisquote + data def syntax_error(self, message): pass def start_quotations(self, attrs): # top level tag print '--- Begin Document ---' def start_quotation(self, attrs): print 'QUOTATION:' def end_quotation(self): print string.join(string.split(self.thisquote[:230]))+'...', print '('+str(len(self.thisquote))+' bytes)\n' self.thisquote = '' def unknown_starttag(self, tag, attrs): self.thisquote = self.thisquote + '{' def unknown_endtag(self, tag): self.thisquote = self.thisquote + '}' def unknown_charref(self, ref): self.thisquote = self.thisquote + '?' def unknown_entityref(self, ref): self.thisquote = self.thisquote + '#' if __name__ == '__main__': parser = QuotationParser() for c in open("sample.xml").read(): parser.feed(c) parser.close()
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索xml
, python
, 文档
, 模块
, 处理
, python 包 模块
, Self
, python模块
python文件处理
,以便于您获取更多的相关知识。