当前位置: 首页 > news >正文

pythony读取xml

xml样例:

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

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

 
 
  1. from xml.dom import minidom 

然后加载xml文件:

 
 
  1. 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

相关文章:

  • 配置DNS支持邮件服务器域名解析,支持别名,反向查找区
  • Flash正式成为Googel Chrome浏览器内置插件
  • mysql主从切换步骤
  • GIS软件开发工具包TatukGIS Developer Kernel更新至v11.9丨附下载
  • javascript:typeof与instanceof区别
  • JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)
  • HTMl编写计算器
  • 使用PEAP实现802.1X
  • 超实用Mac软件分享(二)
  • JDBC获取新增记录的自增主键
  • HTTP协议中状态码的应用
  • Android笔记:触摸事件的分析与总结----MotionEvent对象
  • Ubuntu的系统安装步骤
  • VC 文件复制函数
  • 再议“创建类似于输入法窗口的非激活窗口”
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • CSS 提示工具(Tooltip)
  • ES2017异步函数现已正式可用
  • es6--symbol
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Linux CTF 逆向入门
  • Ruby 2.x 源代码分析:扩展 概述
  • vue-loader 源码解析系列之 selector
  • 安装python包到指定虚拟环境
  • 成为一名优秀的Developer的书单
  • 近期前端发展计划
  • 聊聊redis的数据结构的应用
  • 前端存储 - localStorage
  • 入手阿里云新服务器的部署NODE
  • 推荐一个React的管理后台框架
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • ${ }的特别功能
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (二)c52学习之旅-简单了解单片机
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计ssm电影分享网站
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (转)http-server应用
  • (转)德国人的记事本
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .gitignore文件—git忽略文件
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET 使用配置文件
  • .Net7 环境安装配置