有关Python 2.0 XML问题全解析

日期: 2010-02-09 来源:TechTarget中国 英文

    在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

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐