预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

python3解析XML 在XML解析⽅⾯,Python贯彻了⾃⼰“开箱即⽤”(batteriesincluded)的原则。在⾃带的标准库中,Python提供了⼤量可以⽤于处理XML语 ⾔的包和⼯具,数量之多,甚⾄让Python编程新⼿⽆从选择。 本⽂将介绍深⼊解读利⽤Python语⾔解析XML⽂件的⼏种⽅式,并以笔者推荐使⽤的ElementTree模块为例,演⽰具体使⽤⽅法和场景。⽂ 中所使⽤的Python版本为2.7。 ⼀、什么是XML? XML是可扩展标记语⾔(ExtensibleMarkupLanguage)的缩写,其中的标记(markup)是关键部分。您可以创建内容,然后使⽤限定标 记标记它,从⽽使每个单词、短语或块成为可识别、可分类的信息。 标记语⾔从早期的私有公司和政府制定形式逐渐演变成标准通⽤标记语⾔(StandardGeneralizedMarkupLanguage,SGML)、超⽂本标 记语⾔(HypertextMarkupLanguage,HTML),并且最终演变成XML。XML有以下⼏个特点。 XML的设计宗旨是传输数据,⽽⾮显⽰数据。 XML标签没有被预定义。您需要⾃⾏定义标签。 XML被设计为具有⾃我描述性。 XML是W3C的推荐标准。 ⽬前,XML在Web中起到的作⽤不会亚于⼀直作为Web基⽯的HTML。XML⽆所不在。XML是各种应⽤程序之间进⾏数据传输的最常⽤的 ⼯具,并且在信息存储和描述领域变得越来越流⾏。因此,学会如何解析XML⽂件,对于Web开发来说是⼗分重要的。 ⼆、有哪些可以解析XML的Python包? Python的标准库中,提供了6种可以⽤于处理XML的包。 xml.dom xml.dom实现的是W3C制定的DOMAPI。如果你习惯于使⽤DOMAPI或者有⼈要求这这样做,可以使⽤这个包。不过要注意,在这个包 中,还提供了⼏个不同的模块,各⾃的性能有所区别。 DOM解析器在任何处理开始之前,必须把基于XML⽂件⽣成的树状数据放在内存,所以DOM解析器的内存使⽤量完全根据输⼊资料的⼤ ⼩。 xml.dom.minidom xml.dom.minidom是DOMAPI的极简化实现,⽐完整版的DOM要简单的多,⽽且这个包也⼩的多。那些不熟悉DOM的朋友,应该考虑使⽤ xml.etree.ElementTree模块。据lxml的作者评价,这个模块使⽤起来并不⽅便,效率也不⾼,⽽且还容易出现问题。 xml.dom.pulldom 与其他模块不同,xml.dom.pulldom模块提供的是⼀个“pull解析器”,其背后的基本概念指的是从XML流中pull事件,然后进⾏处理。虽然与 SAX⼀样采⽤事件驱动模型(event-drivenprocessingmodel),但是不同的是,使⽤pull解析器时,使⽤者需要明确地从XML流中pull事 件,并对这些事件遍历处理,直到处理完成或者出现错误。 pull解析(pullparsing)是近来兴起的⼀种XML处理趋势。此前诸如SAX和DOM这些流⾏的XML解析框架,都是push-based,也就是 说对解析⼯作的控制权,掌握在解析器的⼿中。 xml.sax xml.sax模块实现的是SAXAPI,这个模块牺牲了便捷性来换取速度和内存占⽤。SAX是SimpleAPIforXML的缩写,它并不是由W3C官⽅ 所提出的标准。它是事件驱动的,并不需要⼀次性读⼊整个⽂档,⽽⽂档的读⼊过程也就是SAX的解析过程。所谓事件驱动,是指⼀种基于 回调(callback)机制的程序运⾏⽅法。 xml.parser.expat xml.parser.expat提供了对C语⾔编写的expat解析器的⼀个直接的、底层API接⼝。expat接⼝与SAX类似,也是基于事件回调机制,但是这 个接⼝并不是标准化的,只适⽤于expat库。 expat是⼀个⾯向流的解析器。您注册的解析器回调(或handler)功能,然后开始搜索它的⽂档。当解析器识别该⽂件的指定的位置,它会 调⽤该部分相应的处理程序(如果您已经注册的⼀个)。该⽂件被输送到解析器,会被分割成多个⽚断,并分段装到内存中。因此expat可 以解析那些巨⼤的⽂件。 xml.etree.ElementTree(以下简称ET) xml.etree.ElementTree模块提供了⼀个轻量级、Pythonic的API,同时还有⼀个⾼效的C语⾔实现,即xml.etree.cElementTree。与DOM相 ⽐,ET的速度更快,API使⽤更直接、⽅便。与SAX相⽐,ET.iterparse函数同样提供了按需解析的功能,不会⼀次性在内存中读⼊整个⽂ 档。ET的性能与SAX模块⼤致相仿,但是它