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

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、官方实例

 1 import xml.dom.minidom
 2 
 3 document = """\
 4 <slideshow>
 5 <title>Demo slideshow</title>
 6 <slide><title>Slide title</title>
 7 <point>This is a demo</point>
 8 <point>Of a program for processing slides</point>
 9 </slide>
10 
11 <slide><title>Another demo slide</title>
12 <point>It is important</point>
13 <point>To have more than</point>
14 <point>one slide</point>
15 </slide>
16 </slideshow>
17 """
18 
19 dom = xml.dom.minidom.parseString(document)
20 
21 def getText(nodelist):
22 rc = []
23 for node in nodelist:
24 if node.nodeType == node.TEXT_NODE:
25 rc.append(node.data)
26 return ''.join(rc)
27 
28 def handleSlideshowTitle(title):#打印title
29 print "<title>%s</title>" % getText(title.childNodes)#获取所有title的Nodes
30 
31 def handleSlideTitle(title):#打印title
32 print "<h2>%s</h2>" % getText(title.childNodes)#获取所有title的Nodes
33 
34 def handlePoint(point):#打印point
35 print "<li>%s</li>" % getText(point.childNodes)#获取所有point的Nodes
36 
37 def handlePoints(points):#打印多个point
38 print "<ul>"
39 for point in points:
40 handlePoint(point)
41 print "</ul>"
42 
43 def handleSlide(slide):#在slide里获取title和point
44 handleSlideTitle(slide.getElementsByTagName("title")[0])
45 handlePoints(slide.getElementsByTagName("point"))
46 
47 def handleToc(slides):#遍历多个slide获取title
48 for slide in slides:
49 title = slide.getElementsByTagName("title")[0]
50 print "<p>%s</p>" % getText(title.childNodes)
51 
52 def handleSlides(slides):#遍历多个slide获取slide
53 for slide in slides:
54 handleSlide(slide)
55 
56 def handleSlideshow(slideshow):
57 print "<html>"
58 handleSlideshowTitle(slideshow.getElementsByTagName("title")[0])
59 slides = slideshow.getElementsByTagName("slide")
60 handleToc(slides)
61 handleSlides(slides)
62 print "</html>"
63 
64 handleSlideshow(dom)

posted on 2012-10-05 14:29  @Jin  阅读(1797)  评论(0编辑  收藏  举报

导航