test_xml.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <unistd.h>
  16. #include <fcntl.h>
  17. #include "my_xml.h"
  18. static void mstr(char *str,const char *src,uint l1,uint l2)
  19. {
  20.   l1 = l1<l2 ? l1 : l2;
  21.   memcpy(str,src,l1);
  22.   str[l1]='';
  23. }
  24. static int dstr(MY_XML_PARSER *st,const char *attr, uint len)
  25. {
  26.   char str[1024];
  27.   
  28.   mstr(str,attr,len,sizeof(str)-1);
  29.   printf("VALUE '%s'n",str);
  30.   return MY_XML_OK;
  31. }
  32. static int bstr(MY_XML_PARSER *st,const char *attr, uint len)
  33. {
  34.   char str[1024];
  35.   
  36.   mstr(str,attr,len,sizeof(str)-1);
  37.   printf("ENTER %sn",str);
  38.   return MY_XML_OK;
  39. }
  40. static int estr(MY_XML_PARSER *st,const char *attr, uint len)
  41. {
  42.   char str[1024];
  43.   
  44.   mstr(str,attr,len,sizeof(str)-1);
  45.   printf("LEAVE %sn",str);
  46.   return MY_XML_OK;
  47. }
  48. static void usage(const char *prog)
  49. {
  50.   printf("Usage:n");
  51.   printf("%s xmlfilen",prog);
  52. }
  53. int main(int ac, char **av)
  54. {
  55.   char str[1024*64]="";
  56.   const char *fn;
  57.   int  f;
  58.   uint len;
  59.   MY_XML_PARSER p;
  60.   
  61.   if (ac<2)
  62.   {
  63.     usage(av[0]);
  64.     return 0;
  65.   }
  66.   
  67.   fn=av[1]?av[1]:"test.xml";
  68.   if ((f=open(fn,O_RDONLY))<0)
  69.   {
  70.     fprintf(stderr,"Err '%s'n",fn);
  71.     return 1;
  72.   }
  73.   
  74.   len=read(f,str,sizeof(str)-1);
  75.   str[len]='';
  76.   
  77.   my_xml_parser_create(&p);
  78.   
  79.   my_xml_set_enter_handler(&p,bstr);
  80.   my_xml_set_value_handler(&p,dstr);
  81.   my_xml_set_leave_handler(&p,estr);
  82.   
  83.   if (MY_XML_OK!=(f=my_xml_parse(&p,str,len)))
  84.   {
  85.     printf("ERROR at line %d pos %d '%s'n",
  86.       my_xml_error_lineno(&p)+1,
  87.       my_xml_error_pos(&p),
  88.       my_xml_error_string(&p));
  89.   }
  90.   
  91.   my_xml_parser_free(&p);
  92.   
  93.   return 0;
  94. }