xml样例:

 
    
  1. xml version="1.0"?> 
  2. <config> 
  3.         <backupdir id="100">/backup/backupdir> 
  4.         <dbbackup id="1"> 
  5.                 <host>192.168.1.100host> 
  6.                 <user>rootuser> 
  7.                 <passwd>123456passwd> 
  8.                 <dbname>lhpdbname> 
  9.         dbbackup> 
  10.         <dbbackup id="2"> 
  11.                 <host>192.168.1.101host> 
  12.                 <user>rootuser> 
  13.                 <passwd>123456passwd> 
  14.                 <dbname>lhp_s2dbname> 
  15.         dbbackup> 
  16.         <webbackup id="1"> 
  17.                 <dir>/data/wwwdir> 
  18.         webbackup> 
  19. config> 

首先导入模块,我使用的是minidom:

 
    
  1. from xml.dom import minidom 

然后加载xml文件:

 
    
  1. dom = minidom.parse('backup.xml'

现在我想读取/backup/这一个元素中的ID的值和这一个元素的值

首先要找到这个元素,使用getElementsByTagName() 可以找到xml中某个元素:

 >>> dom.getElementsByTagName('backupdir')
[]

这里返回的是一上列表,所以我们要指定第一个值:

 >>> dom.getElementsByTagName('backupdir')[0]

得到这个值我们就可以获取id:

>>> dom.getElementsByTagName('dbbackup')[0].getAttribute('id')
u'1'

然后我们看看bakupdir元素下面的节点有什么:

 >>> dom.getElementsByTagName('backupdir')[0].childNodes
[]

和dbbackup对比一下:

 >>> dom.getElementsByTagName('dbbackup')[0].childNodes
[     ">, ,     ">, ,     ">, ,     ">, ,   ">]

xml中换行也是一个内容,如果元素像backupdir那样,想获取值就很简单:

 >>> dom.getElementsByTagName('backupdir')[0].childNodes[0].data
u'/backup/'

如果要获取嵌套的元素内容就要使用循环,把空格排除就可以了,排除空格使用nodeType属性可以做到

nodeType是结点的类型,现在有以下几种:

'ATTRIBUTE_NODE'
'CDATA_SECTION_NODE'
'COMMENT_NODE'
'DOCUMENT_FRAGMENT_NODE'
'DOCUMENT_NODE'
'DOCUMENT_TYPE_NODE'
'ELEMENT_NODE'
'ENTITY_NODE'
'ENTITY_REFERENCE_NODE'
'NOTATION_NODE'
'PROCESSING_INSTRUCTION_NODE'
'TEXT_NODE'

用这条判断式就可以dom.getElementsByTagName('dbbackup')[0].nodeType == dom.getElementsByTagName('dbbackup')[0].ELEMENT_NODE

剩下的东西就跟上面说的是一样的了