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/ironpython:从入门到精通
Oct 02 Python
Python中的CURL PycURL使用例子
Jun 01 Python
Python中用函数作为返回值和实现闭包的教程
Apr 27 Python
python3使用urllib模块制作网络爬虫
Apr 08 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
Mar 13 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 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
Session的工作方式
2006/10/09 PHP
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
在Python程序中实现分布式进程的教程
2015/04/28 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
python 实现兔子生兔子示例
2019/11/21 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
仓库管理员岗位职责
2015/02/03 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
话题作文之诚信
2019/11/28 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
Python实现自动玩连连看的脚本分享
2022/04/04 Python