首页 > 编程 > Python > 正文

进一步了解Python中的XML 工具

2020-02-23 00:41:36
字体:
来源:转载
供稿:网友

模块:xmllib

xmllib 是一个非验证的低级语法分析器。应用程序员使用的 xmllib 可以覆盖 XMLParser 类,并提供处理文档元素(如特定或类属标记,或字符实体)的方法。从 Python 1.5x 到 Python 2.0+ 以来, xmllib 的使用方法并没变化;在绝大多数情况下更好的选择是使用 SAX 技术,它也是种面向流的技术,对语言和开发者来说更为标准。

本文中的示例与原来专栏中的相同:包括一个叫做 quotations.dtd 的 DTD 以及这个 DTD 的文档 sample.xml (请参阅 参考资料,以获取本文中提到的文件的档案)。以下的代码显示了 sample.xml 中每段引言的前几行,并生成了非常简单的未知标记和实体的 ASCII 指示符。经过分析的文本作为连续流来处理,所使用的任何累加器都由程序员负责(如标记中的字符串 (#PCDATA),或所遇到的标记的列表或词典)。
清单 1: try_xmllib.py

import         xmllib, string        classQuotationParser        (xmllib.XMLParser):  """Crude xmllib extractor for quotations.dtd document"""          def__init__        (self):    xmllib.XMLParser.__init__(self)    self.thisquote = ''               # quotation accumulator               defhandle_data        (self, data):    self.thisquote = self.thisquote + data          defsyntax_error        (self, message):            pass  defstart_quotations        (self, attrs):         # top level tag                   print         '--- Begin Document ---'          defstart_quotation        (self, attrs):            print         'QUOTATION:'          defend_quotation        (self):            print         string.join(string.split(self.thisquote[:230]))+'...',            print         '('+str(len(self.thisquote))+' bytes)/n'    self.thisquote = ''          defunknown_starttag        (self, tag, attrs):    self.thisquote = self.thisquote + '{'          defunknown_endtag        (self, tag):    self.thisquote = self.thisquote + '}'          defunknown_charref        (self, ref):    self.thisquote = self.thisquote + '?'          defunknown_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 2.0 XML 包并不包括验证型语法分析器。

xmlproc 是 python 原有的语法分析器,它执行几乎完整的验证。如果需要验证型语法分析器, xmlproc 是 Python 当前唯一的选择。而且, xmlproc 提供其它语法分析器所不具备的各种高级和测试接口。


选择一种语法分析器

如果决定使用 XML 的简单 API (SAX) -- 它应该用于复杂的事物,因为其它大部分工具都是在它的基础上建立的 -- 将为您完成许多语法分析器的分类工作。 xml.sax 模块包含一个自动选择“最佳”语法分析器的设施。在标准 Python 2.0 安装中,唯一能选择的语法分析器是 expat ,它是种 C 语言编写的快速扩展。然而,也可以在 $PYTHONLIB/xml/parsers 下安装另一个语法分析器,以备选择。设置语法分析器很简单:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表