pythonxml解析.docx
PYTHONXML解析什么是XMLXML指可扩展标记语言(EXTENSIBLEMARKUPLANGUAGE)。XML被设计用来传输和存储数据。XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。PYTHON对XML的解析常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。PYTHON有三种方法解析XML,SAX,DOM,以及ELEMENTTREE1SAXSIMPLEAPIFORXMLPYHTON标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。2DOMDOCUMENTOBJECTMODEL将XML数据在内存中解析成一个树,通过对树的操作来操作XML。3ELEMENTTREE元素树ELEMENTTREE就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。注因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(HANDLER)。本章节使用到的XML实例文件MOVIESXML内容如下WAR,THRILLERDVD2003PG10TALKABOUTAUSJAPANWARANIME,SCIENCEFICTIONDVD1989R8ASCHIENTIFICFICTIONANIME,ACTIONDVD4PG10VASHTHESTAMPEDECOMEDYVHSPG2VIEWABLEBOREDOMPYTHON使用SAX解析XMLSAX是一种基于事件驱动的API。利用SAX解析XML文档牵涉到两个部分解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。1、对大型文件进行处理;2、只需要文件的部分内容,或者只需从文件中得到特定信息。3、想建立自己的对象模型的时候。在PYTHON中使用SAX方式处理XML要先引入XMLSAX中的PARSE函数,还有XMLSAXHANDLER中的CONTENTHANDLER。CONTENTHANDLER类方法介绍CHARACTERSCONTENT方法调用时机从行开始,遇到标签之前,存在字符,CONTENT的值为这些字符串。从一个标签,遇到下一个标签之前,存在字符,CONTENT的值为这些字符串。从一个标签,遇到行结束符之前,存在字符,CONTENT的值为这些字符串。标签可以是开始标签,也可以是结束标签。STARTDOCUMENT方法文档启动的时候调用。ENDDOCUMENT方法解析器到达文档结尾时调用。STARTELEMENTNAME,ATTRS方法遇到XML开始标签时调用,NAME是标签的名字,ATTRS是标签的属性值字典。ENDELEMENTNAME方法遇到XML结束标签时调用。MAKE_PARSER方法以下方法创建一个新的解析器对象并返回。XMLSAXMAKE_PARSERPARSER_LIST参数说明PARSER_LIST可选参数,解析器列表PARSER方法以下方法创建一个SAX解析器并解析XML文档XMLSAXPARSEXMLFILE,CONTENTHANDLER,ERRORHANDLER参数说明XMLFILEXML文件名CONTENTHANDLER必须是一个CONTENTHANDLER的对象ERRORHANDLER如果指定该参数,ERRORHANDLER必须是一个SAXERRORHANDLER对象PARSESTRING方法PARSESTRING方法创建一个XML解析器并解析XML字符串XMLSAXPARSESTRINGXMLSTRING,CONTENTHANDLER,ERRORHANDLER参数说明XMLSTRINGXML字符串CONTENTHANDLER必须是一个CONTENTHANDLER的对象ERRORHANDLER如果指定该参数,ERRORHANDLER必须是一个SAXERRORHANDLER对象PYTHON解析XML实例CODINGUTF8/USR/BIN/PYTHONIMPORTXMLSAXCLASSMOVIEHANDLERXMLSAXCONTENTHANDLERDEF__INIT__SELFSELFCURRENTDATA““SELFTYPE““SELFAT““SELFYEAR““SELFRATING““SELFSTARS““SELFDESCRIPTION““元素开始事件处理DEFSTARTELEMENTSELF,TAG,ATTRIBUTESSELFCURRENTDATATAGIFTAG“MOVIE“PRINT“MOVIE“TITLEATTRIBUTES“TITLE“PRINT“TITLE“,TITLE元素结束事件处理DEFENDELEMENTSELF,TAGIFSELFCURRENTDATA“TYPE“PRINT“TYPE“,SELFTYPEELIFSELFCURRENTDATA“AT“PRINT“AT“,SELFATELIFSELFCURRENTDATA“YEAR“PRINT“YEAR“,SELFYEARELIFSELFCURRENTDATA“RATING“PRINT“RATING“,SELFRATINGELIFSELFCURRENTDATA“STARS“PRINT“STARS“,SELFSTARSELIFSELFCURRENTDATA“DESCRIPTION“PRINT“DESCRIPTION“,SELFDESCRIPTIONSELFCURRENTDATA““内容事件处理DEFCHARACTERSSELF,CONTENTIFSELFCURRENTDATA“TYPE“SELFTYPECONTENTELIFSELFCURRENTDATA“AT“SELFATCONTENTELIFSELFCURRENTDATA“YEAR“SELFYEARCONTENTELIFSELFCURRENTDATA“RATING“SELFRATINGCONTENTELIFSELFCURRENTDATA“STARS“SELFSTARSCONTENTELIFSELFCURRENTDATA“DESCRIPTION“SELFDESCRIPTIONCONTENTIF__NAME__“__MAIN__“创建一个XMLREADERPARSERXMLSAXMAKE_PARSERTURNOFFNAMEPSACESPARSERSETFEATUREXMLSAXHANDLERFEATURE_NAMESPACES,0重写CONTEXTHANDLERHANDLERMOVIEHANDLERPARSERSETCONTENTHANDLERHANDLERPARSERPARSE“MOVIESXML“以上代码执行结果如下MOVIETITLEENEMYBEHINDTYPEWAR,THRILLERATD