有关Python 2.0 XML问题全解析

开发 后端
Python 2.0 XML 是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能够简单而有效地实现面向对象编程。

PythonPython 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),或所遇到的标记的列表或词典)。

  1. classQuotationHandler(ContentHandler):  
  2.     """Crude extractor for quotations.dtd compliant XML document"""  
  3.     def__init__(self):  
  4.         self.in_quote = 0 
  5.         self.thisquote = '' 
  6.     defstartDocument(self):  
  7.         print '--- Begin Document ---'  
  8.     defstartElement(self, name, attrs):  
  9.         if name == 'quotation':  
  10.             print 'QUOTATION:'  
  11.             self.in_quote = 1 
  12.         else:  
  13.             selfself.thisquote = self.thisquote + '{'  
  14.     defendElement(self, name):  
  15.         if name == 'quotation':  
  16.             print string.join(string.split(self.thisquote[:230]))+'...',  
  17.             print '('+str(len(self.thisquote))+' bytes)'  
  18.             self.thisquote = '' 
  19.             self.in_quote = 0 
  20.         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> 写入文件的方法更灵活。

【编辑推荐】

  1. 如何使Python嵌入C++应用程序?
  2. 深入探讨Ruby与Python语法比较
  3. Python学习资料介绍分享
  4. Python学习经验谈:版本、IDE选择及编码解决方案
  5. 浅析Python的GIL和线程安全
责任编辑:chenqingxiang 来源: CSDN
相关推荐

2010-03-10 13:29:01

以太网交换机

2010-02-06 09:38:42

Android调用服务

2010-02-02 13:32:32

Python继承

2010-03-05 13:46:12

Android编程学习

2010-03-01 18:21:08

Python测试

2018-05-30 15:10:24

Spring BootList类型

2010-02-05 18:04:36

Android程序框架

2010-01-28 13:15:43

C++参数

2010-03-10 15:36:52

交换机

2010-02-06 17:17:17

Android手机

2010-03-04 17:50:42

Android操作系统

2022-07-29 07:36:01

虚拟机编程语言

2009-05-05 17:52:48

系统安全密码安全Windows

2010-02-03 13:27:17

Python 特性

2010-03-01 14:28:46

Python进程

2010-02-22 10:18:29

Python代码

2010-02-24 16:33:28

Python功能

2010-02-22 13:20:58

Python中文问题

2010-02-26 15:43:02

Python线程

2010-03-12 13:51:54

点赞
收藏

51CTO技术栈公众号