Python XML解析.docx
- 文档编号:30764447
- 上传时间:2023-08-23
- 格式:DOCX
- 页数:11
- 大小:17.41KB
Python XML解析.docx
《Python XML解析.docx》由会员分享,可在线阅读,更多相关《Python XML解析.docx(11页珍藏版)》请在冰豆网上搜索。
PythonXML解析
PythonXML解析
什么是XML?
XML指可扩展标记语言(eXtensibleMarkupLanguage)。
XML被设计用来传输和存储数据。
XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
python对XML的解析
常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。
python有三种方法解析XML,SAX,DOM,以及ElementTree:
1.SAX(simpleAPIforXML)
pyhton标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
2.DOM(DocumentObjectModel)
将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。
代码可用性好,速度快,消耗内存少。
注:
因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。
本章节使用到的XML实例文件movies.xml内容如下:
python使用SAX解析xml
SAX是一种基于事件驱动的API。
利用SAX解析XML文档牵涉到两个部分:
解析器和事件处理器。
解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;
而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。
∙1、对大型文件进行处理; ∙2、只需要文件的部分内容,或者只需从文件中得到特定信息。 ∙3、想建立自己的对象模型的时候。 在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler。 ContentHandler类方法介绍 characters(content)方法 调用时机: 从行开始,遇到标签之前,存在字符,content的值为这些字符串。 从一个标签,遇到下一个标签之前,存在字符,content的值为这些字符串。 从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。 标签可以是开始标签,也可以是结束标签。 startDocument()方法 文档启动的时候调用。 endDocument()方法 解析器到达文档结尾时调用。 startElement(name,attrs)方法 遇到XML开始标签时调用,name是标签的名字,attrs是标签的属性值字典。 endElement(name)方法 遇到XML结束标签时调用。 make_parser方法 以下方法创建一个新的解析器对象并返回。 xml.sax.make_parser([parser_list]) 参数说明: ∙parser_list-可选参数,解析器列表 parser方法 以下方法创建一个SAX解析器并解析xml文档: xml.sax.parse(xmlfile,contenthandler[,errorhandler]) 参数说明: ∙xmlfile-xml文件名 ∙contenthandler-必须是一个ContentHandler的对象 ∙errorhandler-如果指定该参数,errorhandler必须是一个SAXErrorHandler对象 parseString方法 parseString方法创建一个XML解析器并解析xml字符串: xml.sax.parseString(xmlstring,contenthandler[,errorhandler]) 参数说明: ∙xmlstring-xml字符串 ∙contenthandler-必须是一个ContentHandler的对象 ∙errorhandler-如果指定该参数,errorhandler必须是一个SAXErrorHandler对象 Python解析XML实例 #coding=utf-8 #! /usr/bin/python importxml.sax classMovieHandler(xml.sax.ContentHandler): def__init__(self): self.CurrentData="" self.type="" self.format="" self.year="" self.rating="" self.stars="" self.description="" #元素开始事件处理 defstartElement(self,tag,attributes): self.CurrentData=tag iftag=="movie": print"*****Movie*****" title=attributes["title"] print"Title: ",title #元素结束事件处理 defendElement(self,tag): ifself.CurrentData=="type": print"Type: ",self.type elifself.CurrentData=="format": print"Format: ",self.format elifself.CurrentData=="year": print"Year: ",self.year elifself.CurrentData=="rating": print"Rating: ",self.rating elifself.CurrentData=="stars": print"Stars: ",self.stars elifself.CurrentData=="description": print"Description: ",self.description self.CurrentData="" #内容事件处理 defcharacters(self,content): ifself.CurrentData=="type": self.type=content elifself.CurrentData=="format": self.format=content elifself.CurrentData=="year": self.year=content elifself.CurrentData=="rating": self.rating=content elifself.CurrentData=="stars": self.stars=content elifself.CurrentData=="description": self.description=content if(__name__=="__main__"): #创建一个XMLReader parser=xml.sax.make_parser() #turnoffnamepsaces parser.setFeature(xml.sax.handler.feature_namespaces,0) #重写ContextHandler Handler=MovieHandler() parser.setContentHandler(Handler) parser.parse("movies.xml") 以上代码执行结果如下: *****Movie***** Title: EnemyBehind Type: War,Thriller Format: DVD Year: 2003 Rating: PG Stars: 10 Description: TalkaboutaUS-Japanwar *****Movie***** Title: Transformers Type: Anime,ScienceFiction Format: DVD Year: 1989 Rating: R Stars: 8 Description: Aschientificfiction *****Movie***** Title: Trigun Type: Anime,Action Format: DVD Rating: PG Stars: 10 Description: VashtheStampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Stars: 2 Description: Viewableboredom 完整的SAXAPI文档请查阅PythonSAXAPIs 使用xml.dom解析xml 文件对象模型(DocumentObjectModel,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。 一个DOM的解析器在解析一个XML文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。 python中用xml.dom.minidom来解析xml文件,实例如下: #coding=utf-8 #! /usr/bin/python fromxml.dom.minidomimportparse importxml.dom.minidom #使用minidom解析器打开XML文档 DOMTree=xml.dom.minidom.parse("movies.xml") collection=DOMTree.documentElement ifcollection.hasAttribute("shelf"): print"Rootelement: %s"%collection.getAttribute("shelf") #在集合中获取所有电影 movies=collection.getElementsByTagName("movie") #打印每部电影的详细信息 formovieinmovies: print"*****Movie*****" ifmovie.hasAttribute("title"): print"Title: %s"%movie.getAttribute("title") type=movie.getElementsByTagName('type')[0] 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 以上程序执行结果如下: Rootelement: NewArrivals *****Movie***** Title: EnemyBehind Type: War,Thriller Format: DVD Rating: PG Description: TalkaboutaUS-Japanwar *****Movie***** Title: Transformers Type: Anime,ScienceFiction Format: DVD Rating: R Description: Aschientificfiction *****Movie***** Title: Trigun Type: Anime,Action Format: DVD Rating: PG Description: VashtheStampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Description: Viewableboredom
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python XML解析 XML 解析