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计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
使用Python写个小监控
Jan 27 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
python实现旋转和水平翻转的方法
Oct 25 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
Django MEDIA的配置及用法详解
Jul 25 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
pytorch 实现查看网络中的参数
Jan 06 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 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编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
简单的php购物车代码
2020/06/05 PHP
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python是编译运行的验证方法
2015/01/30 Python
Python通过select实现异步IO的方法
2015/06/04 Python
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
python多线程方式执行多个bat代码
2016/06/07 Python
简单谈谈Python中的闭包
2016/11/30 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
python处理csv中的空值方法
2018/06/22 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Python如何实现邮件功能
2020/05/27 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
领导干部四风问题自我剖析材料
2014/09/25 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python