转载了这么多的文章,终于可以写一点自己的东西了。初学Python不久,程序中不当之处还请各位看官不吝赐教。
本文中很多地方都是参考了其他人的博文,具体的也不甚清楚到底参考了哪些,在此仅列出一个大概吧。绿色背景表示含有链接。
感谢gaodeyue,他的例程写的很好。我直接参考了他的DOM构建和解析XML文档的程序写了一个我自己的XML文档。另外的那篇Python处理XML数据之SAX篇我想也还不错,不过现在觉得还是没必要学,时间又稍微有点紧,所以先不弄了,转载过来好了。其实想写这篇博文也是因为看了他的Python处理XML数据之DOM篇才有这个想法的。非常感谢。
感谢yueguanghaidao,在网上游荡了好久,发现用ElementTree来解析XML文档的很多,但是用ElementTree来生成XML文件的真滴不多,而且很杂乱,然后我就找到了yueguanghaidao的这篇博文,参照着把ElementTree生成XML文档的程序给写出来了。同样非常感谢。本博文的第二大段文字“Python有三种方法解析XML”亦是来自于yueguanhaidao,在此再次表示感谢。
感谢大CC,引用了他写的美化程序,非常的好用,非常谢谢!
注:我所使用的Python版本为2.7.3
Python提供了两种XML支持:
第一种是支持两种XML解析的行业标准方法——SAX和DOM 。 SAX(Simple API for XML ,用于XML的简单API)以事件处理为基础,按照遇到XML元素的顺序读取XML文档,触发处理函数来执行处理。DOM (Document Object Model ,文档对象模型)构建表示整个XML文档的树结构。树结构构建完成后, DOM将提供一个遍历树和提取数据的接口。SAX和DOM API都不是源自Python ,Python只是复制了为Java和JavaScript开发的接口。
第二种是支持特定于Python的XML解析方住。尽管可以使用SAX和DOM接口处理XML ,但是标准库中最方便的编程接口还是ElementTree接口。这种方住充分利用了Python的语言特点,大部分用户发现它比SAX或DOM要更加简单快捷。本文将讨论这3 种XML解析方法,重点讨论ElementTree方法。
这里建议读者只关注基本的XML数据解析。Python还包括与实现新类型解析、从头构建XML文档等方面有关的XML模块。此外,各种第三方扩展插件扩展了Python的功能,添加了其他XML功能,如支持XSLT和XPATH。更多信息的链接,请参见http://wiki.python.org/moin/PythonXml。
python有三种方法解析XML:SAX、DOM以及ElementTree
1.SAX (simple API for XML )
pyhton 标准库包含SAX解析器,SAX是一种典型的极为快速的工具,在解析XML时,不会占用大量内存。但是这是基于回调机制的,因此在某些数据中,它会调用某些方法进行传递。这意味着必须为数据指定句柄,以维持自己的状态,这是非常困难的。
2.DOM(Document Object Model)
与SAX比较,DOM典型的缺点是比较慢,消耗更多的内存,因为DOM会将整个XML数读入内存中,并为树中的第一个节点建立一个对象。使用DOM的好处是你不需要对状态进行追踪,因为每一个节点都知道谁是它的父节点,谁是子节点。但是DOM用起来有些麻烦。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少,这里主要介绍ElementTree。
下面是一个简单的XML例子,其文件名为ep1.xml
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<