可爱的Python: 重温Python的XML工具

David Mertz 创作的 可爱的 Python的第一、第二部分概述了在 Python 中使用XML。然而,在那些最初的文章出现后,Python 中的 XML工具有了很大的发展。不幸的是,这些改进中的大多数并不向后兼容。在这个特别部分中,重温了作者先前对XML 工具的讨论,并提供最新的代码示例。

在许多情况下,Python 是使用 XML 文档的理想语言。像 Perl、REBOL、REXX 和 TCL 一样,它是一种灵活的脚本语言,并且有强大的文本操作能力。而且,除了对多数类型的文本文件(或流文件)编码外,XML 文档还编码大量复杂的数据结构。

继续在 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 是一个非验证的低级语法分析器。应用程序员使用的 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
                    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
, 文档
, def
, 处理
, Self
, python数据预处理
, python文件处理
Python工具
python xml 解析工具、python xml、python xml解析、python 读取xml文件、python 读取xml,以便于您获取更多的相关知识。

时间: 2024-12-23 03:03:38

可爱的Python: 重温Python的XML工具的相关文章

进一步了解Python中的XML 工具_python

模块:xmllib xmllib 是一个非验证的低级语法分析器.应用程序员使用的 xmllib 可以覆盖 XMLParser 类,并提供处理文档元素(如特定或类属标记,或字符实体)的方法.从 Python 1.5x 到 Python 2.0+ 以来, xmllib 的使用方法并没变化:在绝大多数情况下更好的选择是使用 SAX 技术,它也是种面向流的技术,对语言和开发者来说更为标准. 本文中的示例与原来专栏中的相同:包括一个叫做 quotations.dtd 的 DTD 以及这个 DTD 的文档

python sax模块解析xml遇到非法字符怎么解决?

问题描述 python sax模块解析xml遇到非法字符怎么解决? 1C 用python的sax模块解析xml的时候出现非法字符直接停止了,百度搜到有大神说用回调函数处理当前的非法字符或者跳过直接运行接下来的内容.不过具体应该怎么实现呢?求大神赐教.下面是我的代码,非法字符是出现再其中的很多个tagname=""url""中的内容,能在原来的基础上改就更好了,再次感谢 import xml.saxclass XmlHandler( xml.sax.ContentHa

可爱的Python:Python中的文本处理

与其它几种流行的脚本语言一样,Python 是一种用于浏览和处理文本数据的优秀工具.本文为 Python 的初学者概述了 Python 的文本处理工具.文章说明了规则表达式的一些常规概念,并提供了处理文本时,什么情况下应使用(或不使用)规则表达式的建议. 什么是 Python? Python 是由 Guido van Rossum 开发的.可免费获得的.非常高级的解释型语言.其语法简单易懂,而其面向对象的语义功能强大(但又灵活).Python 可以广泛使用并具有高度的可移植性. 字符串 -- 不

Python使用minidom读写xml的方法

  本文实例讲述了Python使用minidom读写xml的方法.分享给大家供大家参考.具体分析如下: 一 python提供的xml支持 2种工业标准的xml解析方法-SAX和DOM.SAX(simple API for XML),是基于事件处理的,当XML文档顺序地读入时,每次遇到一个元素会触发相应的事件处理函数来处理.DOM(Document Object Model),通过构建一个树结构来表现整个xml文档,一旦树被构建,可以通过DOM提供了接口来遍历树和提取相应的数据. python还提

python自定义解析简单xml格式文件的方法

  这篇文章主要介绍了python自定义解析简单xml格式文件的方法,涉及Python解析XML文件的相关技巧,非常具有实用价值,需要的朋友可以参考下: 因为公司内部的接口返回的字串支持2种形式:php数组,xml;结果php数组python不能直接用,而xml字符串的格式不是标准的,所以也不能用标准模块解析.[不标准的地方是某些节点会的名称是以数字开头的],所以写个简单的脚步来解析一下文件,用来做接口测试. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

python比较2个xml内容的方法

  这篇文章主要介绍了python比较2个xml内容的方法,涉及Python操作XML文件的相关技巧,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 from xml.etree import ElementTree OK=True main_p

用 Python 实现 Python 解释器

Allison 是 Dropbox 的工程师,在那里她维护着这个世界上最大的 Python 客户端网络之一.在去 Dropbox 之前,她是 Recurse Center 的协调人, 是这个位于纽约的程序员深造机构的作者.她在北美的 PyCon 做过关于 Python 内部机制的演讲,并且她喜欢研究奇怪的 bug.她的博客地址是 akaptur.com. 介绍 Byterun 是一个用 Python 实现的 Python 解释器.随着我对 Byterun 的开发,我惊喜地的发现,这个 Pytho

跟老齐学Python之Python文档_python

文档很重要.独孤九剑的剑诀.易筋经的心法.写着辟邪剑谱的袈裟,这些都是文档.连那些大牛人都要这些文档,更何况我们呢?所以,文档是很重要的. 文档,说白了就是用word(这个最多了)等(注意这里的等,把不常用的工具都等掉了,包括我编辑文本时用的vim工具)文本编写工具写成的包含文本内容但不限于文字的文件.有点啰嗦,啰嗦的目的是为了严谨,呵呵.最好还是来一个更让人信服的定义,当然是来自维基百科. 复制代码 代码如下: 软件文档或者源代码文档是指与软件系统及其软件工程过程有关联的文本实体.文档的类型包

用Python实现Python解释器

Allison 是 Dropbox 的工程师,在那里她维护着这个世界上最大的 Python 客户端网络之一.在去 Dropbox 之前,她是 Recurse Center 的协调人, 是这个位于纽约的程序员深造机构的作者.她在北美的 PyCon 做过关于 Python 内部机制的演讲,并且她喜欢研究奇怪的 bug.她的博客地址是akaptur.com. 介绍 Byterun 是一个用 Python 实现的 Python 解释器.随着我对 Byterun 的开发,我惊喜地的发现,这个 Python