00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <stdio.h>
00013 #include <expat.h>
00014 #include <string.h>
00015
00016 static void XMLCALL text_data (void *userData, const XML_Char *s, int len){
00017 XML_Char* c = (XML_Char*)malloc(sizeof(XML_Char)* len + 1);
00018 memcpy(c, s, len);
00019 c[len] = 0;
00020 printf("%i| %s\n", len, c);
00021 free(c);
00022 }
00023
00024 int main(int argc, char *argv[]) {
00025 FILE* input = fopen("country.xml","r+");
00026 char buf[BUFSIZ];
00027 XML_Parser parser = XML_ParserCreate(NULL);
00028 int done;
00029 int depth = 0;
00030 XML_SetUserData(parser, &depth);
00031 XML_SetCharacterDataHandler(parser, text_data);
00032 do {
00033 size_t len = fread(buf, 1, sizeof(buf), input);
00034 done = len < sizeof(buf);
00035 if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
00036 fprintf(stderr,
00037 "%s at line %d\n",
00038 XML_ErrorString(XML_GetErrorCode(parser)),
00039 XML_GetCurrentLineNumber(parser));
00040 return 1;
00041 }
00042 } while (!done);
00043 XML_ParserFree(parser);
00044 fclose(input);
00045 return 0;
00046 }