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 相关文章推荐
Python3遍历目录树实现方法
May 22 Python
python图像处理之反色实现方法
May 30 Python
python操作mysql数据库
Mar 05 Python
Python中正则表达式详解
May 17 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
有趣的python小程序分享
Dec 05 Python
tensorflow获取变量维度信息
Mar 10 Python
Django  ORM 练习题及答案
Jul 19 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
Python如何访问字符串中的值
Feb 09 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
用python自动生成日历
Apr 24 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实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
Python字符串处理之count()方法的使用
2015/05/18 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
python如何调用字典的key
2020/05/25 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
单位绩效考核方案
2014/05/11 职场文书
有关环保的标语
2014/06/13 职场文书
教师节感谢信
2015/01/22 职场文书
事业单位个人总结
2015/02/12 职场文书
电气工程师岗位职责
2015/02/12 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
7个关于Python的经典基础案例
2021/11/07 Python