xml样例:
- <?xml version="1.0"?>
- <config>
- <backupdir id="100">/backup/</backupdir>
- <dbbackup id="1">
- <host>192.168.1.100</host>
- <user>root</user>
- <passwd>123456</passwd>
- <dbname>lhp</dbname>
- </dbbackup>
- <dbbackup id="2">
- <host>192.168.1.101</host>
- <user>root</user>
- <passwd>123456</passwd>
- <dbname>lhp_s2</dbname>
- </dbbackup>
- <webbackup id="1">
- <dir>/data/www</dir>
- </webbackup>
- </config>
首先导入模块,我使用的是minidom:
- from xml.dom import minidom
然后加载xml文件:
- dom = minidom.parse('backup.xml')
现在我想读取<backupdir id="100">/backup/</backupdir>这一个元素中的ID的值和这一个元素的值
首先要找到这个元素,使用getElementsByTagName() 可以找到xml中某个元素:
>>> dom.getElementsByTagName('backupdir') [<DOM Element: backupdir at 0x2c7da88>] |
这里返回的是一上列表,所以我们要指定第一个值:
>>> dom.getElementsByTagName('backupdir')[0] <DOM Element: backupdir at 0x2c7da88> |
得到这个值我们就可以获取id:
>>> dom.getElementsByTagName('dbbackup')[0].getAttribute('id') u'1' |
然后我们看看bakupdir元素下面的节点有什么:
>>> dom.getElementsByTagName('backupdir')[0].childNodes [<DOM Text node "/backup/">] |
和dbbackup对比一下:
>>> dom.getElementsByTagName('dbbackup')[0].childNodes [<DOM Text node " ">, <DOM Element: host at 0x2c7dd08>, <DOM Text node " ">, <DOM Element: user at 0x2c7de08>, <DOM Text node " ">, <DOM Element: passwd at 0x2c7df08>, <DOM Text node " ">, <DOM Element: dbname at 0x2c82048>, <DOM Text node " ">] |
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
剩下的东西就跟上面说的是一样的了
本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/890287如需转载请自行联系原作者
lihuipeng