参考资料《dive into python》
Python读xml文档的方法有多种,这里介绍用dom模块,需要下载PyXML- 0.8.4.win32-py2.5.exe库(我用的python2.5)。
假如我们有个xml文档如下:example.xml
<?xml version="1.0" encoding="UTF-8"?>
<BIT>
<GeneralDescription>
<name>Matlab</name>
<DateTime>2008-09-10 23:16:48</DateTime>
</GeneralDescription>
<AMatrix>1,2,3;4,5,6;7,8,9</AMatrix>
</BIT>
首先,要解析xml文档,需要导入一个模块
>>> from xml.dom.minidom import parse
(1)然后载入一个xml文档
>>> xmldoc = parse("J:/homeword/example.xml")
>>> print xmldoc.toxml()
<?xml version="1.0" ?>
<BIT>
<GeneralDescription>
<name>Matlab</name>
<DateTime>2008-09-10 23:16:48</DateTime>
</GeneralDescription>
<AMatrix>1,2,3;4,5,6;7,8,9</AMatrix>
</BIT>
>>>
上面是可以查看这个文档的内容。
Toxml方法打印出了node风格的xml,如果节点是Document结果,则打印出整个xml文档。否则只打印出本节点所属内容。
(2)如何获取子节点
>>> xmldoc.childNodes
[<DOM Element: BIT at 0x1223af8>]
>>>
每一个node都有一个childNodes的属性,他是一个node对象的列表,注意的是,一个Document只有一个子节点,上例中就是BIT这个节点,它属于Document节点。
因为是列表,所以也可以同用列表索引,xmldoc.childNodes[0]
>>> BIT_element = xmldoc.firstChild
>>> BIT_element
<DOM Element: BIT at 0x1223af8>
>>> print BIT_element.toxml()
<BIT>
<GeneralDescription>
<name>Matlab</name>
<DateTime>2008-09-10 23:16:48</DateTime>
</GeneralDescription>
<AMatrix>1,2,3;4,5,6;7,8,9</AMatrix>
</BIT>
>>>
(3)获得某一个节点的文本
>>> BIT_element.childNodes
[<DOM Text node "
">, <DOM Element: GeneralDescription at 0x1223be8>, <DOM Text node "
">, <DOM Element: AMatrix at 0x1223e40>, <DOM Text node "
">]
>>>name = (BIT_element.childNodes[1]).childNodes[1]
>>> >>> name.childNodes[0].data
u'Matlab'
>>>
这种办法是比较笨的办法,如果对于大型的xml文档就不适应了。
# -*- coding:utf-8 -*- from xml.etree import ElementTree as ET # r = ET.parse('web.xml') # print(r) from xml.dom.minidom import parse xmldoc = parse("web.xml") def printtree(p): print(p) if p.hasChildNodes()==0: return else: for x in p.childNodes: printtree(x) if __name__=="__main__": # xmldoc2 = parse("web.xml") # if xmldoc.toxml()==xmldoc2.toxml(): # print 1 # else: # print(2) print("***************************") # printtree(xmldoc.childNodes[0]) print(xmldoc.toxml()) # print(p) # printtree(p)