Python3处理XML文件学习
介绍
XML是Extensible Markup Language
的缩写,类似于HTML
和SGML
。XML适用于小规模或者中等规模且不使用数据库的应用场景。
XML解析器架构和API
Python标准库提供处理XML文件最小限度且有效的接口。XML数据处理最广泛使用的API主要有SAX
和DOM
接口。
-
Simple API For XML(SAX)
:在这里,你注册感兴趣事件的回调函数,然后让解析器遍历文档。当你的文档较大或者内存受限时,这种方法是有用的,解析器一边从硬盘读取数据,一边解析文件,这样整个文件无需保存在内存。 -
Document Object Model(DOM) API
:DOM
是WWW
联盟推荐的API,这要求整个文件被读取到内存,按照层次形式表示XML文档的所有特征。
显然,当处理大文件时,根据工作机制,SAX
不可能像DOM
那样快速处理信息。另一方面,如果只使用DOM
可能会耗尽你的资源,尤其是用于处理许多小文件时。
SAX
是只读的,然而DOM
允许对XML
文件改写。这两种方法是互补,在处理大文件时,可以根据场景灵活决定具体使用哪种API。
XML
示例文件如下:
<collection shelf = "New Arrivals">
<movie title = "Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movie>
<movie title = "Transformers">
<type>Anime, Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>8</stars>
<description>A schientific fiction</description>
</movie>
<movie title = "Trigun">
<type>Anime, Action</type>
<format>DVD</format>
<episodes>4</episodes>
<rating>PG</rating>
<stars>10</stars>
<description>Vash the Stampede!</description>
</movie>
<movie title = "Ishtar">
<type>Comedy</type>
<format>VHS</format>
<rating>PG</rating>
<stars>2</stars>
<description>Viewable boredom</description>
</movie>
</collection>
使用SAX
API解析XML
SAX
是事件驱动XML解析的标准接口。使用SAX
解析XML通常要求开发人员通过继承xml.sax.ContentHandler
创建自己的.ContentHandler
。
ContentHandler
处理你感兴趣XML的特定标签和属性。.ContentHandler
对象提供了各种解析事件的方法。当解析器解析XML文件时,解析器调用.ContentHandler
方法。