开源xml解析器.doc

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Expat Expat 是什么?   Expat 是一个用C语言开发的、用来解析XML文档的开发库,它最初是开源的、Mozilla 项目下的一个XML解析器。 关于作者   这个库的开发者是James Clark, 还开发了很多我们所熟知的工具包:groff、 Jade、 XP a Java XML parser package 、 and XT a Java XSL engine 。 Expat XML Parser 概述   Expat是一个面向流的解析器。您注册的解析器回调(或handler)功能,然后开始搜索它的文档。当解析器识别该文件的指定的位置,它会调用该部分相应的处理程序(如果您已经注册的一个)。该文件被输送到解析器,会被分割成多个片断,并分段装到内存中。因此expat可以解析那些巨大的文件。 如何使用它们   Expat XML Parser支持设置多种不同的处理器。但是要使用它们,你只需要学习四个功能,即可满足80%的需要。 它们是: XML_ParserCreate Create a new parser object. XML_SetElementHandler Set handlers for start and end tags. XML_SetCharacterDataHandler Set handler for text. XML_Parse Pass a buffer full of document to the parser 开源的XML Parser expat 文章分类:C++编程 expat是使用C所写的XML解释器,采用流的方式来解析XML文件,并且基于事件通知型来调用分析到的数据,并不需要把所有XML文件全部加载到内存里,这样可以分析非常大的XML文件。由于 expat库是由XML的主要负责人James Clark来实现的,因此它是符合W3C的XML标准的。 正因为源码全部是纯C所写,因此,非常容易移植,尤其是适用于嵌入式平台,我在往联芯的手机平台上移植时,几乎没改任何东西。 不过,优点也带来了缺点,因为是采用流的方式解析XML,所以不会像TinyXML那样在一块内存中生成基于DOM的树。 虽然这样解析起来略显麻烦,但是基于回调的机制,在我看来还是蛮方便的。下面就说使用方法: 首先是用XML_ParserCreate const XML_Char *encodingName ,参数一般为NULL,函数返回一个XML_Parser类型指针,我们就当他是一个句柄吧,类似于Windows里的内核对象,一般需要保存在一个全局的指针里。 然后调用XML_SetElementHandler XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end 第一个参数是那个Parser句柄,第二个和第三个参数则是整个Parser的核心,类型为CallBack的函数,不了解CallBack函数的,我在这里简单说下,函数调用一般分为两种,一种是主调,即编写代码者自己调用的函数,还一种为Callback函数,编码者写好,但他自己却不主动调用,而是在某些条件下(编码者并不清楚具体时间和流程),由其他函数调用,比如设备驱动,操作系统提供了一组某个设备的函数指针,比如LCD屏驱动,由一组画点,画线,画块等函数组成,当更换LCD时,只需要把操作系统开放的函数指针,指向你提供的接口即可,操作系统再需要时,会自动调用你的驱动函数,这就是回调函数一个典型的例子。 这二个回调分别是对应于解析 和 , 下面分别详细介绍这个2个回调函数。 typedef void XMLCALL *XML_StartElementHandler void *userData, const XML_Char *name, const XML_Char **atts ; 其中第一个参数userData, 可以由函数XML_SetUserData XML_Parser parser, void *p 设置,参数就不用说了吧? 后面两个参数,我用个具体的列子说明下,这样更好理解: 比如有个标准XML,某个标签属性如下: feed version 2.0 ctxt-id 9212 template-id default feed-type ftti 那么StartElementHandler回调返回的name就是标签feed, **atts是一个指针数组,分别指向标签的一组属性,atts[0]就是version, atts[1]就是2.0, 以此类推。应该很清楚了吧?呵呵。这时候必然有个对应的 ?typ

文档评论(0)

80092355km + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档