Python模块libxml2

libxml2是一个很强大的处理XML文件的Python模块,通过C写成,这里介绍了一下基本的资料,安装,下载和基本指令,还有一个libxml2造成的内存泄露的处理方式。

libxml2是一个很强大的处理XML文件的Python模块,通过C写成,这里介绍了一下基本的资料,安装,下载和基本指令,还有一个libxml2造成的内存泄露的处理方式。

官方网址:
http://xmlsoft.org/
具体的下载地址,埋的很深,至少我花了一段时间才找到,这里直接给出win32下的Python模块下载地址:
http://xmlsoft.org/sources/win32/python/
根据自己的Python版本下载就行。

官方网站上给的操作信息是在少的可怜,只有单单一页的Python API介绍
http://xmlsoft.org/python.html

后来找了一些大神的博客才算零零碎碎的筹齐需要的知识点:
XPath (libxml2) in Python
http://ukchill.com/technology/getting-started-with-libxml2-and-python-part-1/
http://ukchill.com/technology/getting-started-with-libxml2-and-python-part-2/

这几就介绍一下最简单的操作:

import libxml2
doc = libxml2.parseFile(filename) #可以使用parseDoc代替parseFile,两者的区别是DOC处理已经读进进程的文件,File是能自己读取文件,所以只需要提供文件名。
ctxt = doc.xpathNewContext()
record_nodes = ctxt.xpathEval('/*') #括号中的XPATH,这是寻找的是根目录下的所有NODE。 xpathEval寻找结果给出的是一个x列表,如xrange(10)生成的内容。
for node in record_nodes:
    name = node.name #node的名字
    content = node.content #node的内容
    sous-nodes = node.xpathEval('*') #node下面的子node,同处理根目录的原理一下进行处理。
    ...

#释放内存
if doc:
    doc.freeDoc()

由于libxml2在读取xml文本后不会自动释放内存,因此会出现内存泄露问题,这个困扰了我好久,一直以为是Python的程序问题,,找了一大堆Python程序的内存管理资料,但是最后才发现是libxml2的问题。所以上面代码中给出了释放内存的指令,非常非常重要!

ps python下管理内存模块gc

import gc

a=['abc' for x in range(1000**5)]
del a
gc.collect()