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 相关文章推荐
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
Python字符串的常见操作实例小结
Apr 08 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
对Django中内置的User模型实例详解
Aug 16 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
tensorflow 变长序列存储实例
Jan 20 Python
Python logging模块进行封装实现原理解析
Aug 07 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 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中exec与system用法区别分析
2014/09/22 PHP
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
Django自定义认证方式用法示例
2017/06/23 Python
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
对python中的高效迭代器函数详解
2018/10/18 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
如何利用find命令查找文件
2015/02/07 面试题
一套Delphi的笔试题一
2016/02/14 面试题
三八妇女节活动总结
2014/05/04 职场文书
刑事上诉状范文
2015/05/22 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书