20Python中的XML操作
来源:互联网 发布:h5场景节日软件 编辑:程序博客网 时间:2024/05/19 13:18
1. DOM解析器
# -*-coding: utf-8 -*-# 1.Dom解析器# 一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,# 把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM# 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的# 内容写入xml文件。# 类似于C++中的TinyXml等。from xml.dom.minidom import parseimport xml.dom.minidom# 使用minidom打开并解析xml,解析得到的树放在变量tree中。tree = xml.dom.minidom.parse("20movies.xml")# collection是根节点,其余所有的元素都在这个节点下面。collection = tree.documentElement# 获取该节点的属性。if collection .hasAttribute("shelf"): print "Root element : %s " % collection .getAttribute("shelf");# 获得collection节点下面所有的movie节点,返回一个数组。movies = collection .getElementsByTagName("movie")# 遍历每个movie节点。for movie in movies: print "*****Movie*****" if movie.hasAttribute("title"): print "Title: %s " % movie.getAttribute("title") # 获取movie节点下面的第一个tpye节点,因为其他情况中可能有多个type节点,所以使用索引[0] type = movie.getElementsByTagName("type")[0] # 获取type节点的内容节点。 print "Type: % s " % type.childNodes[0].data format = movie.getElementsByTagName('format')[0] print "Format: %s" % format.childNodes[0].data rating = movie.getElementsByTagName('rating')[0] print "Rating: %s" % rating.childNodes[0].data description = movie.getElementsByTagName('description')[0] print "Description: %s" % description.childNodes[0].data
2. SAX解析器
# -*-coding: utf-8 -*-# 1.SAX解析器# SAX是一种基于事件驱动的API。# 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。# 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;# 而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。# 我们要做的就是重写事件处理器的方法。# 应用场景:# (A)对大型文件进行处理;# (B)只需要文件的部分内容,或者只需从文件中得到特定信息。# (C)想建立自己的对象模型的时候。# ContentHandler类方法介绍# (A)characters(content)方法# 调用时机:# 从行开始,遇到标签之前,存在字符,content的值为这些字符串。# 从一个标签,遇到下一个标签之前, 存在字符,content的值为这些字符串。# 从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。# 标签可以是开始标签,也可以是结束标签。# (B)startDocument()方法# 文档启动的时候调用。# (C)endDocument()方法# 解析器到达文档结尾时调用。# (D)startElement(name, attrs)方法# 遇到XML开始标签时调用,name是标签的名字,attrs是标签的属性值字典。# (E)endElement(name)方法# 遇到XML结束标签时调用。import xml.saxclass MovieHandler(xml.sax.ContentHandler): def __init__(self): self.CurrentTag = "" self.type = "" self.format = "" self.year = "" self.rating = "" self.stars = "" self.description = "" # 当开始解析每个元素开始时,触发该事件。每个元素也就是<element/>或者<element></element> # 参数tag是个字符串,也就是element的名字,attrs是一个数组,是该element的属性。 # 总结:如果要得到一个element的name和attribute,要在startElement中获取。 def startElement(self, tag, attrs): self.CurrentTag = tag if tag == "movie": print "*****Movie*****" title = attrs["title"] print "Title: ", title # 当解析完一个元素的时候,触发该事件。 # 总结:因为元素是可以层层嵌套的,所以区分是哪个元素结束, # 那么可以用一个if语句来判断,因为参数tag是当前结束的元素的名字。 def endElement(self, tag): if tag == "type": print "Type: ", self.type; elif tag == "format": print "Format:", self.format elif tag == "year": print "Year:", self.year elif tag == "rating": print "Rating:", self.rating elif tag == "stars": print "Stars:", self.stars elif tag == "description": print "Description:", self.description # 当解析到元素的value时,也就是元素的内容时,触发该事件。 def characters(self, content): if self.CurrentTag == "type": self.type = content; elif self.CurrentTag == "format": self.format = content; elif self.CurrentTag == "year": self.year = content; elif self.CurrentTag == "rating": self.rating = content elif self.CurrentTag == "stars": self.stars = content elif self.CurrentTag == "description": self.description = contentif __name__ == '__main__': # 创建一个sax解析器。 parser = xml.sax.make_parser() # 关闭命名空间,xml是有命名空间的。 parser.setFeature(xml.sax.handler.feature_namespaces, 0) # 创建Movie ContentHandler。 movie_handler = MovieHandler() # 给解析器设置handler。 parser.setContentHandler(movie_handler) # 进行解析。 parser.parse("20movies.xml")
阅读全文
0 0
- 20Python中的XML操作
- python操作xml文档
- python操作xml
- python对XML 操作
- Python操作XML
- python对XML 操作
- python对XML 操作
- python对XML 操作
- python对XML 操作
- Python XML操作处理
- Python XML操作处理
- python对XML 操作
- python操作XML
- xml模块操作 python
- [python]python操作xml文件
- java中的XML操作
- java中的xml操作
- python中的xml
- 随手记
- python dlib学习(二):人脸特征点标定
- PAT 甲 1014. Waiting in Line (30)(优先队列)
- 10.25
- 视觉slam14讲——第2讲 初识SLAM
- 20Python中的XML操作
- bfs简单题 迷宫问题
- linux中的列举多个连续数字的文件的表示方法讲解
- 构图规律
- spring aop学习4:织入原理
- 慎用alpha值——setAlpha与getBackground.setAlpha的差别
- 使用socket.io编程的简单聊天室
- 21Python中多线程的创建
- 修改ad值实现路由备份