在Python中将Python 2.0 XML与一些规则表达式比较”样式通常不能很好地适合对XML进行彻底语法分析和处理,Python不仅有处理复杂数据结构的直接方法,还有一系列 XML 相关的模块可以帮助语法分析、处理和生成XML。
XML-SIG(专门兴趣组)的成员为维护Python一系列XML工具做了许多工作。与其它Python专门兴趣组一样,XML-SIG要维护邮件发送列表、列表档案、有用的参考大全、文档、标准包和其它资源(请参阅本文后的参考资料)。
从Python 2.0开始,Python在其标准发行版中包括大多数XML-SIG项目。最新的XML-SIG包可能包含一些Python标准发行版中没有的“极端先进”特性,但出于面向绝大多数人的目的
包括本文中的讨论Python 2.0 XML支持将是您感兴趣的。幸运的是,早期Python版本对xmllib的基本支持在Python 2.0+下有了很大进步。目前,Python 用户能正常的选择。
DOM、SAX和expat技术来处理XML (使用其他编程语言的XML开发人员将会意识到这些)。xmllib是一个非验证的低级语法分析器。应用程序员使用的xmllib可以覆盖XMLParser类,并提供处理文档元素(如特定或类属标记,或字符实体)的方法。
从Python 1.5x到Python 2.0+以来,xmllib的使用方法并没变化;在绝大多数情况下更好的选择是使用SAX技术,它也是种面向流的技术,对语言和开发者来说更为标准。本文中的示例与原来专栏中的相同:包括一个叫做quotations.dtd的DTD以及这个DTD的文档sample.xml (请参阅参考资料,以获取本文中提到的文件的档案)。
以下的代码显示了sample.xml中每段引言的前几行,并生成了非常简单的未知标记和实体的 ASCII 指示符。经过分析的文本作为连续流来处理,所使用的任何累加器都由程序员负责(如标记中的字符串 (#PCDATA),或所遇到的标记的列表或词典)。
以下是引用片段: classQuotationHandler(ContentHandler): “””Crude extractor for quotations.dtd compliant XML document””” def__init__(self): self.in_quote = 0 self.thisquote = ” defstartDocument(self): print ‘— Begin Document —‘ defstartElement(self, name, attrs): if name == ‘quotation’: print ‘QUOTATION:’ self.in_quote = 1 else: selfself.thisquote = self.thisquote + ‘{‘ defendElement(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: |
您可能需要展望标准XML支持的未来的原因是,在进行语法分析的同时需要进行验证。不幸的是,标准Python 2.0 XML包并不包括验证型语法分析器。xmlproc是python原有的语法分析器,它执行几乎完整的验证。如果需要验证型语法分析器, xmlproc是Python 2.0 XML当前唯一的选择。而且,xmlproc提供其它语法分析器所不具备的各种高级和测试接口。
您可以直接导入 xml.parsers.expat。如果这样做,您就能获得SAX界面并不提供的一些特殊技巧。这样,xml.parsers.expat 与 SAX 相比有些“低级”。但 SAX 技术非常标准,对面向流的处理也非常好;
大多数情况下 SAX 的级别正合适。通常情况下,由于make_parser() 函数已经能获得 expat 提供的性能,因此纯速度的差异很小,DOM 可以用于修改 XML 文档,因为可以创建一棵 DOM 树。
通过添加新节点和来回移动子树来修改这棵树,然后生成一个新的XML文档作为输出。您也可以自己构造一棵DOM树,然后将它转换成 XML;用这种方法生成XML输出比仅将 <tag1>…</tag1> 写入文件的方法更灵活。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
openstack用python如何获取某个user的资源,如router、net、subnet [ OpenStack]
-
Python项目的部署,目前互联网公司有哪些成熟的方案?
-
AWS Lambda服务功能增加VPC和Python支持
在众多寻求在服务器上运行代码又不想配置服务器的开发人员中,AWS Lambda已经是越来越普及了,而其一系列的新功能也拓展了其应用。
-
怎么安装python的开发工具包boto呢?