用expat解析包解析XML文件

前端之家收集整理的这篇文章主要介绍了用expat解析包解析XML文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
要了解如何使用expat XML解析器之前,先来仔细地分析一下怎么样使用expat库的小例子,看看具体调用了那些接口函数,是否会很复杂的呢?‘它的例子程序如下:@H_404_1@
#001@H_404_1@
#013@H_404_1@
#014@H_404_1@ @H_404_1@ 下面包括输出文件和库文件头。@H_404_1@
#015 #include <stdio.h>@H_404_1@
#016 #include "xmlparse.h"@H_404_1@
#017@H_404_1@ 定义缓冲区的大小。@H_404_1@
#018 #define BUFFSIZE 8192@H_404_1@
#019@H_404_1@ 创建一个缓冲区。@H_404_1@
#020 char Buff[BUFFSIZE];@H_404_1@
#021@H_404_1@ #022 int Depth;@H_404_1@
#023@H_404_1@ 下面定义一个XML元素开始处理的函数。@H_404_1@
#024 void@H_404_1@
#025 start(void *data,const char *el,const char **attr) {@H_404_1@
#026 int i;@H_404_1@
#027@H_404_1@ #028 for (i = 0; i < Depth; i++)@H_404_1@
#029 printf(" ");@H_404_1@
#030@H_404_1@ #031 printf("%s",el);@H_404_1@
#032@H_404_1@ #033 for (i = 0; attr[i]; i += 2) {@H_404_1@
#034 printf(" %s='%s'",attr[i],attr[i + 1]);@H_404_1@
#035 }@H_404_1@
#036@H_404_1@ #037 printf("\n");@H_404_1@
#038 Depth++;@H_404_1@
#039 }@H_404_1@
#040@H_404_1@ 下面定义一个XML元素结束调用函数。@H_404_1@
#041 void@H_404_1@
#042 end(void *data,const char *el) {@H_404_1@
#043 Depth--;@H_404_1@
#044 }@H_404_1@
#045@H_404_1@ 程序入口点。@H_404_1@
#046 void@H_404_1@
#047 main(int argc,char **argv) {@H_404_1@
创建一个XML分析器。@H_404_1@
#048 XML_Parser p = XML_ParserCreate(NULL);@H_404_1@
下面判断是否创建XML分析器失败。@H_404_1@
#049 if (! p) {@H_404_1@
#050 fprintf(stderr,"Couldn't allocate memory for parser\n");@H_404_1@
#051 exit(-1);@H_404_1@
#052 }@H_404_1@
#053@H_404_1@ 下面设置每个XML元素出现和结束的处理函数。这里设置start为元素开始处理函数,end元素结束处理函数。@H_404_1@
#054 XML_SetElementHandler(p,start,end);@H_404_1@
#055@H_404_1@ 循环分析所有XML文件。@H_404_1@
#056 for (;;) {@H_404_1@
#057 int done;@H_404_1@
#058 int len;@H_404_1@
#059@H_404_1@ 调用函数fread从文件里读取数据到缓冲区Buff里。@H_404_1@
#060 len = fread(Buff,1,BUFFSIZE,stdin);@H_404_1@
读取文件出错就退出。@H_404_1@
#061 if (ferror(stdin)) {@H_404_1@
#062 fprintf(stderr,"Read error\n");@H_404_1@
#063 exit(-1);@H_404_1@
#064 }@H_404_1@
判断是否读取文件到结束。@H_404_1@
#065 done = feof(stdin);@H_404_1@
#066@H_404_1@ 调用函数XML_Parse来分析缓冲区Buff里的XML数据。@H_404_1@
#067 if (! XML_Parse(p,Buff,len,done)) {@H_404_1@
#068 fprintf(stderr,"Parse error at line %d:\n%s\n",@H_404_1@
#069 XML_GetCurrentLineNumber(p),180)">#070 XML_ErrorString(XML_GetErrorCode(p)));@H_404_1@
#071 exit(-1);@H_404_1@
#072 }@H_404_1@
#073@H_404_1@ 如果分析文件到结尾位置,或者出错,就可以退出循环处理。@H_404_1@
#074 if (done)@H_404_1@
#075 break;@H_404_1@
#076 }@H_404_1@
#077 }@H_404_1@
#078@H_404_1@ #079@H_404_1@ #080@H_404_1@ 通过上面调用函数XML_ParserCreate、XML_SetElementHandler、XML_Parse等三个函数就完成了XML的分析过程,这样使用起来真是太简单了,看到expat库的威力无穷。@H_404_1@

猜你在找的XML相关文章