视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python使用minidom读写xml的方法
2020-11-27 14:41:13 责编:小采
文档


本文实例讲述了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" ?> 
 
  
 l inux  
 30 
  
  
 windows  
 20 
  

三 使用xml.dom.minidom来读写xml

1)使用xml.dom.minidom来解析xml:

def TestMiniDom(): 
 from xml.dom import minidom 
 doc = minidom.parse( "employees.xml" ) 
 # get root element:  
 root = doc.documentElement 
 # get all children elements:   
 employees = root.getElementsByTagName( "employee" ) 
 for employee in employees: 
 print ( " ------------------------------------------- " ) 
 # element name : employee 
 print (employee.nodeName) 
 # element xml content : windows20 
 # 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 = '
' ,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,包含元素间的‘ '和空格均为textNode;
*writexml() 时addindent=' '表示子元素的缩进,newl=' '表示元素间的换行,encoding='utf-8'表示生成的xml的编码格式(<?xml version="1.0" encoding="utf-8"?>)。

希望本文所述对大家的Python程序设计有所帮助。

下载本文
显示全文
专题