志在指尖
用双手敲打未来

Python XML 解析

什么是XML?

XML指可扩展符号言语(eXtensibleMarkupLanguage)。你可以经过本站学习XML教程
XML被设计用来传输和存储数据。
XML是一套界说语义符号的规则,这些符号将文档分成许多部件并对这些部件加以标识。
它也是元符号言语,即界说了用于界说其他与特定领域有关的、语义的、结构化的符号言语的句法言语。
Python对XML的解析
常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的办法不同,当然运用场合也不同。
Python有三种办法解析XML,SAX,DOM,以及ElementTree:
1.SAX(simpleAPIforXML)
Python标准库包含SAX解析器,SAX用事情驱动模型,经过在解析XML的过程中触发一个个的事情并调用用户界说的回调函数来处理XML文件。
2.DOM(DocumentObjectModel)
将XML数据在内存中解析成一个树,经过对树的操作来操作XML。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有便利友爱的API。代码可用性好,速度快,耗费内存少。
注:因DOM需求将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需求用户实现回调函数(handler)。Python
本章节运用到的XML实例文件movies.xml内容如下:
movies.xml
<collectionshelf=”NewArrivals”><movietitle=”EnemyBehind”><type>War,Thrillertype><format>DVDformat><year>2003year><rating>PGrating><stars>10stars><description>TalkaboutaUS-Japanwardescription>movie><movietitle=”Transformers”><type>Anime,ScienceFictiontype><format>DVDformat><year>1989year><rating>Rrating><stars>8stars><description>Aschientificfictiondescription>movie><movietitle=”Trigun”><type>Anime,Actiontype><format>DVDformat><episodes>4episodes><rating>PGrating><stars>10stars><description>VashtheStampede!description>movie><movietitle=”Ishtar”><type>Comedytype><format>VHSformat><rating>PGrating><stars>2stars><description>Viewableboredomdescription>movie>collection>
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实例
实例
#!/usr/bin/python#-*-coding:UTF-8-*-importxml.saxclassMovieHandler(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=tagiftag==”movie”:print”*****Movie*****”title=attributes[“title”]print”Title:”,title#元素完毕事情处理defendElement(self,tag):ifself.CurrentData==”type”:print”Type:”,self.typeelifself.CurrentData==”format”:print”Format:”,self.formatelifself.CurrentData==”year”:print”Year:”,self.yearelifself.CurrentData==”rating”:print”Rating:”,self.ratingelifself.CurrentData==”stars”:print”Stars:”,self.starselifself.CurrentData==”description”:print”Description:”,self.descriptionself.CurrentData=””#内容事情处理defcharacters(self,content):ifself.CurrentData==”type”:self.type=contentelifself.CurrentData==”format”:self.format=contentelifself.CurrentData==”year”:self.year=contentelifself.CurrentData==”rating”:self.rating=contentelifself.CurrentData==”stars”:self.stars=contentelifself.CurrentData==”description”:self.description=contentif(__name__==”__main__”):#创立一个XMLReaderparser=xml.sax.make_parser()#turnoffnamepsacesparser.setFeature(xml.sax.handler.feature_namespaces,0)#重写ContextHandlerHandler=MovieHandler()parser.setContentHandler(Handler)parser.parse(“movies.xml”)
以上代码履行成果如下:
*****Movie*****Title:EnemyBehindType:War,ThrillerFormat:DVDYear:2003Rating:PGStars:10Description:TalkaboutaUS-Japanwar*****Movie*****Title:TransformersType:Anime,ScienceFictionFormat:DVDYear:1989Rating:RStars:8Description:Aschientificfiction*****Movie*****Title:TrigunType:Anime,ActionFormat:DVDRating:PGStars:10Description:VashtheStampede!*****Movie*****Title:IshtarType:ComedyFormat:VHSRating:PGStars:2Description:Viewableboredom
完整的SAXAPI文档请查阅PythonSAXAPIs
运用xml.dom解析xml
文件目标模型(DocumentObjectModel,简称DOM),是W3C组织引荐的处理可扩展置标言语的标准编程接口。
一个DOM的解析器在解析一个XML文档时,一次性读取整个文档,把文档中一切元素保存在内存中的一个树结构里,之后你可以运用DOM提供的不同的函数来读取或修正文档的内容和结构,也可以把修正过的内容写入xml文件。
python中用xml.dom.minidom来解析xml文件,实例如下:
实例
#!/usr/bin/python#-*-coding:UTF-8-*-fromxml.dom.minidomimportparseimportxml.dom.minidom#运用minidom解析器翻开XML文档DOMTree=xml.dom.minidom.parse(“movies.xml”)collection=DOMTree.documentElementifcollection.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].dataformat=movie.getElementsByTagName(‘format’)[0]print”Format:%s”%format.childNodes[0].datarating=movie.getElementsByTagName(‘rating’)[0]print”Rating:%s”%rating.childNodes[0].datadescription=movie.getElementsByTagName(‘description’)[0]print”Description:%s”%description.childNodes[0].data
以上程序履行成果如下:
Rootelement:NewArrivals*****Movie*****Title:EnemyBehindType:War,ThrillerFormat:DVDRating:PGDescription:TalkaboutaUS-Japanwar*****Movie*****Title:TransformersType:Anime,ScienceFictionFormat:DVDRating:RDescription:Aschientificfiction*****Movie*****Title:TrigunType:Anime,ActionFormat:DVDRating:PGDescription:VashtheStampede!*****Movie*****Title:IshtarType:ComedyFormat:VHSRating:PGDescription:Viewableboredom

未经允许不得转载:IT技术网站 » Python XML 解析
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载