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使用urllib2模块获取gravatar头像实例
Dec 18 Python
python私有属性和方法实例分析
Jan 15 Python
Python中文字符串截取问题
Jun 15 Python
简单解决Python文件中文编码问题
Nov 22 Python
python flask 多对多表查询功能
Jun 25 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
Python Socket使用实例
Dec 18 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
Jul 12 Python
Python闭包思想与用法浅析
Dec 27 Python
python实现逻辑回归的示例
Oct 09 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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
cmd下运行php脚本
2008/11/25 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
你必须知道的Javascript知识点之&quot;字面量和对应类型&quot;说明介绍
2013/04/23 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
JS二分查找算法详解
2017/11/01 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
python实现2048小游戏
2015/03/30 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
锦旗赠语
2015/06/23 职场文书
高一军训口号
2015/12/25 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
MySQL慢查询优化解决问题
2022/03/17 MySQL