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的Django框架中manage命令的使用与扩展
Apr 11 Python
python中的lambda表达式用法详解
Jun 22 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
python 获取字符串MD5值方法
May 29 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
Python Django 前后端分离 API的方法
Aug 28 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
Jan 13 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
python实现单机五子棋
Aug 28 Python
python实现求纯色彩图像的边框
Apr 08 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 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在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
php静态文件生成类实例分析
2015/01/03 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
js实现消息滚动效果
2017/01/18 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
Python set集合类型操作总结
2014/11/07 Python
Python中super关键字用法实例分析
2015/05/28 Python
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
Python使用getpass库读取密码的示例
2017/10/10 Python
python3中的md5加密实例
2018/05/29 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
房地产融资计划书
2014/01/10 职场文书
初二生物教学反思
2014/02/03 职场文书
努力学习演讲稿
2014/05/10 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
2014年销售部工作总结
2014/12/01 职场文书
导游词之清晏园
2019/11/22 职场文书
mysql事务对效率的影响分析总结
2021/10/24 MySQL