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 初始化多维数组代码
Sep 06 Python
python 编程之twisted详解及简单实例
Jan 28 Python
Python自动发邮件脚本
Mar 31 Python
pygame实现弹力球及其变速效果
Jul 03 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
Dec 10 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
Django unittest 设置跳过某些case的方法
Dec 26 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
如何解决安装python3.6.1失败
Jul 01 Python
Python过滤序列元素的方法
Jul 31 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
dedecms模版制作使用方法
2007/04/03 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP中的session安全吗?
2016/01/22 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
javascript 闭包详解
2015/02/15 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
跟老齐学Python之一个免费的实验室
2014/09/14 Python
Python实现115网盘自动下载的方法
2014/09/30 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
python调用百度REST API实现语音识别
2018/08/30 Python
python中while和for的区别总结
2019/06/28 Python
python3获取当前目录的实现方法
2019/07/29 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
应届生会计求职信
2013/11/11 职场文书
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
农业资源与环境专业自荐信范文
2013/12/30 职场文书
销售演讲稿范文
2014/01/08 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
优秀团员事迹材料
2014/12/25 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏