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 imgareaselect手动剪切头像实现方法
May 26 Python
Python模拟百度登录实例详解
Jan 20 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 Python
python之列表推导式的用法
Nov 29 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
python字符串下标与切片及使用方法
Feb 13 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
用python对excel查重
Dec 07 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
php函数之子字符串替换&amp;#65279; str_replace
2011/03/23 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
js Date概念详细介绍
2013/11/22 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
Python实现验证码识别
2020/06/15 Python
Python如何使用input函数获取输入
2020/08/06 Python
应届生求职推荐信
2013/10/28 职场文书
资料员岗位职责
2013/11/17 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书