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)

你可能感兴趣的:(python)