Python使用minidom读写xml的方法


Posted in Python onJune 03, 2015

本文实例讲述了Python使用minidom读写xml的方法。分享给大家供大家参考。具体分析如下:

一 python提供的xml支持

2种工业标准的xml解析方法-SAX和DOM。SAX(simple API for XML),是基于事件处理的,当XML文档顺序地读入时,每次遇到一个元素会触发相应的事件处理函数来处理。DOM(Document Object Model),通过构建一个树结构来表现整个xml文档,一旦树被构建,可以通过DOM提供了接口来遍历树和提取相应的数据。
 
python还提供了python独特的xml解析方法,相比于SAX和DOM更容易使用和更加快速,此方法为ElementTree。
 
python的xml模块为:

1)xml.dom.minidom
2)xml.elementtree
3)xml.sax + xml.dom

二 xml实例:(employees.xml)

<?xml version="1.0" encoding="UTF-8" ?> 
<employees>  
 <employee>  
  <name>l inux </name> 
  <age> 30 </age> 
 </employee> 
 <employee>  
  <name>windows </name> 
  <age> 20 </age> 
 </employee> 
</employees>

三 使用xml.dom.minidom来读写xml
 
1)使用xml.dom.minidom来解析xml:

def TestMiniDom(): 
  from xml.dom import minidom 
  doc = minidom.parse( "employees.xml" ) 
  # get root element: <employees/> 
  root = doc.documentElement 
  # get all children elements: <employee/> <employee/> 
  employees = root.getElementsByTagName( "employee" ) 
  for employee in employees: 
    print ( " ------------------------------------------- " ) 
    # element name : employee 
    print (employee.nodeName) 
    # element xml content : <employee><name>windows</name><age>20</age></employee> 
    # basically equal to toprettyxml function 
    print (employee.toxml()) 
    nameNode = employee.getElementsByTagName( "name" )[0] 
    print (nameNode.childNodes) 
    print (nameNode.nodeName +  ":"  + nameNode.childNodes[0].nodeValue) 
    ageNode = employee.getElementsByTagName( "age" )[0] 
    print (ageNode.childNodes) 
    print (ageNode.nodeName +  ":"  + ageNode.childNodes[0].nodeValue) 
    print ( " ------------------------------------------- " ) 
    for n in employee.childNodes: 
      print (n) 
TestMiniDom()

2)使用xml.dom.minidom来生成xml:

def CreateXml(): 
  import xml.dom.minidom 
  impl = xml.dom.minidom.getDOMImplementation() 
  dom = impl.createDocument(None, 'employees' , None) 
  root = dom.documentElement  
  employee = dom.createElement( 'employee' ) 
  root.appendChild(employee) 
  nameE = dom.createElement( 'name' ) 
  nameT = dom.createTextNode( 'linux' ) 
  nameE.appendChild(nameT) 
  employee.appendChild(nameE) 
  ageE = dom.createElement( 'age' ) 
  ageT = dom.createTextNode( '30' ) 
  ageE.appendChild(ageT) 
  employee.appendChild(ageE)
  f = open( 'employees2.xml' , 'w') 
  dom.writexml(f, addindent = ' ' , newl = '\n' ,encoding = 'utf-8' )
  f.close()  
CreateXml()

3)使用xml.dom.minidom需要注意的

*使用parse()或createDocument()返回的为DOM对象;
*使用DOM的documentElement属性可以获得Root Element;
*DOM为树形结构,包含许多的nodes,其中element是node的一种,可以包含子elements,textNode也是node的一种,是最终的子节点;
*每个node都有nodeName,nodeValue,nodeType属性,nodeValue是结点的值,只对textNode有效。对于textNode,想得到它的文本内容可以使用: .data属性。
*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'
*getElementsByTagName()可以根据名字来查找子elements;
*childNodes返回所有的子Nodes,其中所有的文本均为textNode,包含元素间的‘\n\r'和空格均为textNode;
*writexml() 时addindent='  '表示子元素的缩进,newl='\n'表示元素间的换行,encoding='utf-8'表示生成的xml的编码格式(<?xml version="1.0" encoding="utf-8"?>)。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python序列操作之进阶篇
Dec 08 Python
Python日期的加减等操作的示例
Aug 15 Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 Python
对Python中9种生成新对象的方法总结
May 23 Python
10个Python小技巧你值得拥有
Sep 29 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
详解python中eval函数的作用
Oct 22 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
python requests模拟登陆github的实现方法
Dec 26 Python
通过实例了解Python异常处理机制底层实现
Jul 23 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
Python实现程序的单一实例用法分析
Jun 03 #Python
python简单获取本机计算机名和IP地址的方法
Jun 03 #Python
Python自动调用IE打开某个网站的方法
Jun 03 #Python
Python找出文件中使用率最高的汉字实例详解
Jun 03 #Python
Python实现Windows上气泡提醒效果的方法
Jun 03 #Python
Python捕捉和模拟鼠标事件的方法
Jun 03 #Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 #Python
You might like
javascript,php获取函数参数对象的代码
2011/02/03 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
Python数据类型详解(二)列表
2016/05/08 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
小区门卫工作职责
2013/12/14 职场文书
医院门卫岗位职责
2013/12/30 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
新学期开学寄语
2014/01/18 职场文书
高一数学教学反思
2014/02/07 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
低碳环保标语
2014/06/12 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
Python实现简单得递归下降Parser
2022/05/02 Python
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle