您的位置:首页 > 编程语言 > Python开发

python使用minidom读写xml

2013-04-17 22:12 567 查看

1. xml简介

  xml解析方法有两种标准: SAX和DOM。

1.1 SAX

  SAX(Simple API for XML)是基于事件处理的,当XML文档顺序读入时,每次遇到一个元素都会触发相应的事件处理函数来处理。是一种流式处理,

    优点:占用内存小,处理速度快。

    缺点:处理过程比较麻烦。

1.2 DOM

  DOM(Document Object Model)是通过一构建一个树结构来表现整个xml文档的,一旦被构建,可以通过DOM提供的接口来遍历树和提取相应的数据。

    优点:操作方便;

    缺点:占用内存大,速度慢;

2.python中xml操作

   python中还提供了独特的xml解析方法。相比与SAX和DOM容易操作,更加快速,此方法为ElementTree。

  1)xml.dom.minidom

  2) xml.ElementTree

  3)xml.sax + xml.dom

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

from xml.dom import minidom

doc = minidom.parse("employees.xml")
root = doc.documentElement
employees = root.getElementsByTagName('employee')

for e in employees:
print e.nodeName
print e.toxml()

nameNode = e.getElementsByTagName("name")[0]
print nameNode.childNodes
print (nameNode.nodeName + ":" + nameNode.childNodes[0].nodeValue)
ageNode = e.getElementsByTagName('age')[0]
print ageNode.childNodes
print ageNode.nodeName + ":" + ageNode.childNodes[0].nodeValue

for n in e.childNodes:
print n


2.2使用xml.dom.minidom来生成xml

import  xml.dom.minidom
impl  =  xml.dom.minidom.getDOMImplementation()
dom  =  impl.createDocument(None,  ' employees ' , None)
root  =  dom.documentElement
employee  =  dom.createElement( ' employee ' )
employee.setAttribute('id', '12')
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 ' , encoding = ' utf-8 ' )
dom.writexml(f,  addindent = '    ' , newl = ' \n ' ,encoding = ' utf-8 ' )
f.close()


2.3使用minidom注意事项

使用parse()或者createDocument()返回的为DOM对象

使用DOM的documentElement属性可以锋利RootElement;

DOM为树形结构,包含许多的nodes,其中element是node的一种,可以包含了node; 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'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: