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

python模块整理10-xml.dom.minidom模块

2012-10-05 14:29 513 查看
xml.dom.minidom http://docs.python.org/library/xml.dom.minidom.html 一、介绍
XML分析器体系结构和API:
Python标准库提供了一个最小的接口,但有用的一套使用XML.

两个最基本和最广泛使用的API,XML数据是SAX和DOM接口.

Simple API for XML (SAX) : 在这里你感兴趣的事件注册回调,然后让通过的文件进行的解析器。当您的文件是大型或你有内存限制,这是非常有用的,它解析的文件,因为它从磁盘读取整个文件没有存储在内存中.

Document Object Model (DOM) API : 这是万维网联盟的建议,其中将整个文件读入内存,并存储在一个层次(树状)的形式表示XML文档的所有功能.
SAX的,显然不能作为DOM快速处理的信息可以与大文件时的工作。另一方面,使用DOM完全可以真的操作你的资源,特别是如果使用大量小文件.
SAX是只读,而DOM允许修改XML文件。由于这两种不同的API的字面相辅相成,没有任何理由,你为什么不能使用大型项目.

二、XML的DOM API解析:
1、DOM五个基本对象
DOM 的五个基本对象:Document,Node,NodeList,Element,Attr
Document代表整个XML文档,包含有元素,属性等
Nodelist是从Node继承而来的,表示一系列的Node
Node所有组件的一个XML文档是子类的点头
Element:代表的是 XML 文档中的标签元素,继承于 Node
Attr :代表xml文档的属性,需要注意的是: Attribute value nodes on element nodes.
XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。

2、节点
根据 DOM,XML 文档中的每个成分都是一个节点 。
DOM 是这样规定的:
整个文档是一个文档节点
每个 XML 标签是一个元素节点
包含在 XML 元素中的文本是文本节点
每一个 XML 属性是一个属性节点
注释属于注释节点

三、xml.dom.minidom
主要掌握这个
1、xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
filename_or_file是一个文件或者文件对象

If you have XML in a string, you can use the parseString() function instead:
2、xml.dom.minidom.parseString(string[, parser])?
Return a Document that represents the string. This method creates a StringIO object for the string and passes that on to parse().

Both functions return a Document object representing the content of the document.

# Open XML document using minidom parser
DOMTree = xml.dom.minidom.parse("text.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
print "Root element : %s" % collection.getAttribute("shelf")

3、官方实例

import xml.dom.minidom

document = """\
<slideshow>
<title>Demo slideshow</title>
<slide><title>Slide title</title>
<point>This is a demo</point>
<point>Of a program for processing slides</point>
</slide>

<slide><title>Another demo slide</title>
<point>It is important</point>
<point>To have more than</point>
<point>one slide</point>
</slide>
</slideshow>
"""

dom = xml.dom.minidom.parseString(document)

def getText(nodelist):
rc = []
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc.append(node.data)
return ''.join(rc)

def handleSlideshowTitle(title):#打印title
print "<title>%s</title>" % getText(title.childNodes)#获取所有title的Nodes

def handleSlideTitle(title):#打印title
print "<h2>%s</h2>" % getText(title.childNodes)#获取所有title的Nodes

def handlePoint(point):#打印point
print "<li>%s</li>" % getText(point.childNodes)#获取所有point的Nodes

def handlePoints(points):#打印多个point
print "<ul>"
for point in points:
handlePoint(point)
print "</ul>"

def handleSlide(slide):#在slide里获取title和point
handleSlideTitle(slide.getElementsByTagName("title")[0])
handlePoints(slide.getElementsByTagName("point"))

def handleToc(slides):#遍历多个slide获取title
for slide in slides:
title = slide.getElementsByTagName("title")[0]
print "<p>%s</p>" % getText(title.childNodes)

def handleSlides(slides):#遍历多个slide获取slide
for slide in slides:
handleSlide(slide)

def handleSlideshow(slideshow):
print "<html>"
handleSlideshowTitle(slideshow.getElementsByTagName("title")[0])
slides = slideshow.getElementsByTagName("slide")
handleToc(slides)
handleSlides(slides)
print "</html>"

handleSlideshow(dom)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: