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去除列表中重复元素的方法
Mar 20 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
利用Python为iOS10生成图标和截屏
Sep 24 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
Jan 04 Python
Python重新加载模块的实现方法
Oct 16 Python
Django 视图层(view)的使用
Nov 09 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
python中time库的实例使用方法
Oct 31 Python
python快速排序的实现及运行时间比较
Nov 22 Python
Python : turtle色彩控制实例详解
Jan 19 Python
Python定时器线程池原理详解
Feb 26 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
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
javascript编写简易计算器
2017/05/06 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
angular 实时监听input框value值的变化触发函数方法
2018/08/31 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python删除本地夹里重复文件的方法
2020/11/19 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
英语专业个人求职自荐信
2013/09/21 职场文书
电气工程师岗位职责
2014/01/01 职场文书
学习十八大报告感言
2014/02/28 职场文书
创意婚礼策划方案
2014/05/18 职场文书
经典团队口号
2014/06/06 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
2015年度物流工作总结
2015/04/30 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
九不准学习心得体会
2016/01/23 职场文书
2016年少先队活动总结
2016/04/06 职场文书