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 01 Python
Python使用py2exe打包程序介绍
Nov 20 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
python如何使用unittest测试接口
Apr 04 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
python中yield的用法详解——最简单,最清晰的解释
Apr 04 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
python实现两个字典合并,两个list合并
Dec 02 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
利用Python实现Json序列化库的方法步骤
Sep 09 Python
opencv深入浅出了解机器学习和深度学习
Mar 17 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判断字符以及字符串的包含方法属性
2008/08/30 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
php实现评论回复删除功能
2017/05/23 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
利用django如何解析用户上传的excel文件
2017/07/24 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
python logging添加filter教程
2019/12/24 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
python怎么判断模块安装完成
2020/06/19 Python
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
12月红领巾广播稿
2014/02/13 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
汽车促销活动方案
2014/03/31 职场文书
团支部推优材料
2014/05/21 职场文书
个人融资协议书
2014/10/02 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
结婚十年感言
2015/07/31 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
Python echarts实现数据可视化实例详解
2022/03/03 Python
使用Apache Camel表达REST服务的方法
2022/06/10 Servers