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)