ciao a tutti
sto sviluppando un programma che legge dei dati da un file xml preleva i dati che gli servono e poi tramite una queri inserisce il tutto in un database sqlite.
sono arrivato praticametne alla fine, ma ho un problema in pratica non riesco ad aggiornare ID che ad ogni controllo dovrebbe essere implementato di 1, invece ritorna sempre uguale a 1, in pratica da come ho capito questa funzione di mini-xml re-inizializza tutte le variabili ad ogni passo
al momento sono al corto di idee, qualcuno riesce a darmi qualche sugerimento??

il codice è questo

main
codice:
#include <stdlib.h>
#include <stdio.h>
#include <mxml.h>
#include <pthread.h>

mxml_type_t com_cb(mxml_node_t *taskseries);

main()
{
 int anno, mese, giorno, ore, minuti, secondi;
 

FILE *fp;
    mxml_node_t *taskseries;

    fp = fopen("lista.xml", "r");
    taskseries = mxmlLoadFile(NULL, fp, com_cb);
  
    fclose(fp);

}
questa è com_cb
codice:
 #include <stdio.h>
    #include <stdlib.h>
    #include <mxml.h>
    #include <pthread.h>
    #include <sqlite3.h>

     mxml_type_t com_cb(mxml_node_t *taskseries)
        {
          const char *data,*app,*hasdtime;
          int annot,mese,giorno,ore,minuti,secondi;
          int ora,day,year,bis,gm,gbis,i,time;
          int orar,min,dayr,meser,annor;
          int anno[12];
          float dif; 
          double created;
	  int ad,id,c;
	  char insert[110];
	  char *zErrMsg;
	  sqlite3* conn;
	  sqlite3_stmt* result;
	  
       
     //inizializiamo le variabili al 1 gennaio 2012 alle ore 8

       ora=8;
       day=1;
       year=2012;

       anno[0]=31;
       anno[1]=28;
       anno[2]=31;
       anno[3]=30;
       anno[4]=31;
       anno[5]=30;
       anno[6]=31;
       anno[7]=31;
       anno[8]=30;
       anno[9]=31;
       anno[10]=30;
       anno[11]=31;
       gm=0;
       i=0;
       id=1;
       created=2455927.833;     
	

         data = mxmlElementGetAttr(taskseries, "created");
         

          if (data != NULL)
    {
       id=id+1;
       printf("%s \n",data);
        sscanf(data,"%d-%d-%dT%d:%d:%dZ", &annot, &mese, &giorno, &ore, &min, &secondi);
     
            printf("anno : %d\n",annot);
            printf("mese : %d\n",mese);
            printf("giorno : %d\n",giorno);
            printf("ore : %d\n",ore);
            printf("minuti : %d\n",min);
            printf("secondi : %d\n",secondi);
       

     
	 printf("id vale %d \n",id);
	 ad=sqlite3_open("pomodairo.db", &conn);


	  if (ad)
	    {
             printf("Errore durante l'apertura \n");
             sqlite3_close(conn);
	    } 
	  else 
	    {
             printf("Connessione riuscita \n");
	    }

	 app= mxmlElementGetAttr(taskseries,"name");

          if (app != NULL)
       {
         printf("%s \n",app);
        }

         
       /* procedo con il calcolo di created iniziando a convertire tutti
          i dati in minuti partendo dal calcolo degli anni */


      year=annot-year;
      bis=year/4;
      gbis=((1*bis)*24)*60;
      year=(((year*365)*24)*60)+bis;

      printf("gli anni in minuti sono %d \n",year);

         //calcolo mesi di differenza in giorni
      while(i<mese-1){
      gm=gm+anno[i];
      i=i+1;
      }
       printf("i mesi in giorni sono %d \n",gm);
       //calcolo mesi in minuti
      if(mese<2)
       gm=(gm*24)*60;
      else
      {
       gm=gm+1;//perchè il 2012 è bisestile)
       gm=(gm*24)*60;
      }
       printf("i mesi in minuti sono %d \n",gm);

       //calcolo giorni in minuti
       day=((giorno-1)*24)*60;

       printf("i giorni in minuti sono %d \n",day);

       //calcolo la differenza sull'ora
      if(ora > ore)
       ora=(ora-ore)*60;
      else
       ora=(ore-ora)*60;

       printf("l'ora in minuti e %d \n",ora);

       //somma finale
      dif=min+ora+day+gm+year;

      printf("la differenza in minuti è %f \n",dif);

      created=created+(dif*0.0006944);

      printf("il valore di created è \n");
      printf("%f \n",created);


       //passo i dati al database
       

	 c=sprintf(insert,"INSERT INTO pomodoro Values(%d,'%s','pomodoro',0,0,0,%f,NULL,0,1,0,0,3)",id,app,created);
	 printf("%s \n",insert);
	 ad=sqlite3_exec(conn,insert,NULL,0,&zErrMsg);
	   if(ad)
	     {
	      printf("Errore nell'esecuzione della query \n");
	      printf("%s \n",zErrMsg);
	      sqlite3_close(conn);
	     }
	   else
	      printf("Query riuscita \n");

	  
	 printf("id vale %d \n",id);
	sqlite3_close(conn);
	
      } 

  // 	sqlite3_finalize(conn); eliminata perchè genera errore di segmentazione


       return (MXML_TEXT);

       }
se vi serve vi posso mettere anche l'output che ottengo