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 相关文章推荐
Django中URL视图函数的一些高级概念介绍
Jul 20 Python
Python书单 不将就
Jul 11 Python
python中sys.argv函数精简概括
Jul 08 Python
使用python进行拆分大文件的方法
Dec 10 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
python3 enum模块的应用实例详解
Aug 12 Python
Python sorted对list和dict排序
Jun 09 Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
python 如何引入协程和原理分析
Nov 30 Python
python代码实现猜拳小游戏
Nov 30 Python
Python实现智慧校园自动评教全新版
Jun 18 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
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
dedecms中使用php语句指南
2014/11/13 PHP
PHP可变函数学习小结
2015/11/29 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
javascript静态的url如何传递
2007/05/03 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
全面了解js中的script标签
2016/07/04 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
js仿京东放大镜效果
2020/08/09 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
Python修改Excel数据的实例代码
2013/11/01 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
python实现将元祖转换成数组的方法
2015/05/04 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
django 外键model的互相读取方法
2018/12/15 Python
详解Python实现进度条的4种方式
2020/01/15 Python
python 异步async库的使用说明
2020/05/04 Python
python判断正负数方式
2020/06/03 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
校园门卫岗位职责
2013/12/09 职场文书
总经理的岗位职责
2014/02/23 职场文书
幼儿园运动会口号
2014/06/07 职场文书
学术会议通知范文
2015/04/15 职场文书
《观察物体》教学反思
2016/02/17 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
python实现A*寻路算法
2021/06/13 Python
springboot中的pom文件 project报错问题
2022/01/18 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android