Python3处理XML的笔记

应该说,Python(3)不愧其名,在各个方面都能够优雅地进行编程与处理数据。今天我来整理一下在Python3中处理XML的一些方法。

先注明:所提及的前两个库都是 Python3 自带的标准库,请参考官方文档文档:https://docs.python.org/3/library/ 以了解详细使用用法。


标准库中的首选:xml.etree.ElementTree

据说大家都喜欢这个库,那么我就把它列在最前面。据说它性能好,易于理解,那么我就姑且这样认为。

等我多用用再写这一部分啦。

标准库中的所谓标准:xml.domxml.dom.minidom

首先说一下什么是DOM

The Document Object Model, or “DOM,” is a cross-language API from the World Wide Web Consortium (W3C) for accessing and modifying XML documents. A DOM implementation presents an XML document as a tree structure, or allows client code to build such a structure from scratch. It then gives access to the structure through a set of objects which provided well-known interfaces.

来源:python3-doc 20.6节

如果你研究过原生的Javascript中操作DOM的内容的话,你可能对xml.dom这个库产生好感:它是遵从W3C DOM API而设计的。由于W3C只为Java, ECMAScript, IDL三者规定了标准的API接口,Python(3)的非官方实现在很大程度上是参考了IDL中的API设计,但没有刻意追求百分百相同。

W3C对于DOM的设计是分层次(Level)的,越是高层的标准包含了越多的特性与内容(同时,其被采纳的越少)。Python(3)中实现了对DOM Level 2 Spec.的兼容,暂时没有管Level 3的内容。xml.dom.minidom是一个简易的实现,只实现了第一层的规范与少量的第二层规范内容,同样其实现代码也被大大简化。

xml.dom库的功能是完备而齐全的。你可以使用它解析、生成、输出XML文件与字符串。

总体感觉用这个库和原生JS中操作DOM的感觉很类似,大部分方法的名称都相同,可以找到一种亲切感。


第三方库的选择:lxml

pypi上面有一些有意思的库,例如lxml。这个库号称xml.etree.ElementTree的加强版,据说提供了强大的功能(听说例如完整的XPath支持),但唯一的不方便之处是它依赖著名的libxml2库,而这是一个用C语言写成的库,所以安装时需要编译它。如果你的工作环境支持的话,用一用试试也无妨。