参考:http://blog.csdn.net/sinat_29830917/article/details/70241786
http://blog.csdn.net/sunmoon631/article/details/6438617
首先贴上代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "expat/expat.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#define FILE_PATH "test.xml"
int read_xml_file(const char *file_name,char **buff,int *len);
struct XML_ParserStruct * expat_xml_init(char *data);
void start_func(void *userData, const XML_Char *name, const XML_Char **atts);
void end_func(void *userData, const XML_Char *name);
void deal_data(void *userData, const XML_Char *s, int len);
int main(int argc,char * argv[])
{
struct XML_ParserStruct * parser;
int fd,len,isFinal = 0;
char *buff;
char data[500];
read_xml_file(FILE_PATH,&buff,&len);
if(buff == NULL){
printf("read xml file is fail! \n");
exit -1;
}
printf("buff is = %s \n",buff);
parser = expat_xml_init(data);
if(parser == NULL){
perror("expat xml init fail!\n");
exit -1;
}
if(XML_Parse(parser, buff, len,isFinal) == XML_STATUS_ERROR){
fprintf(stderr,
"%s at line %lu\n",
XML_ErrorString(XML_GetErrorCode(parser)),
XML_GetCurrentLineNumber(parser));
printf("XML_Parse error : %s \n",(char *)stderr);
}
free(buff);
return 0;
}
/****************************************************************
N A M E:read_xml_file
F U N