1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
   |  
 
int etat=0; // global
 
enum ETAT{OUVERT=0,AVIS_O,AUTEUR_O,AUTEUR_B,TITRE_O,TITRE_B,TEXTE_O,TEXTE_B};
 
// balise ouverte
static void XMLCALL
start(void *userData, const char *name, const char **atts)
{ 
  switch(etat)
  {
	  	case OUVERT:
					 if(strcmp(name,"document")==0)
					 {
					 															 etat=AVIS_O;
					 }
					 else{
					 			printf("erreur");
					 			exit(0);
						}
					 break;
			case AVIS_O:
					 if(strcmp(name,"avis")==0)
					 {
					 											 etat=AUTEUR_O;
 
					 }
					 break;
			case AUTEUR_O:
					 if(strcmp(name,"auteur")==0)
					 {
					 											 etat=AUTEUR_B;
 
					 }
					 break;	
		 case TITRE_O:
					 if(strcmp(name,"titre")==0)
					 {
					 											 etat=TITRE_B;
 
					 }
					 break;
		 case TEXTE_O:
					 if(strcmp(name,"texte")==0)
					 {
					 											 etat=TEXTE_B;
 
					 }
					 break;	
	 }				 
}
 
// balise fermée
static void XMLCALL
end(void *data, const char *el)
{
 				 if(strcmp(el,"avis")==0)
 				 {
				 					etat=AVIS_O;							 
				 }
				 else if(strcmp(el,"auteur")==0)
 				 {
				 					etat=TITRE_O;							 
				 }
				 else if(strcmp(el,"titre")==0)
 				 {
				 					etat=TEXTE_O;							 
				 }
				 else if(strcmp(el,"texte")==0)
 				 {
				 					etat=AVIS_O;							 
				 }
}
 
// donne textuelle
static void XMLCALL
text(void *userData,const XML_Char *s,int len)
{
 					char *p_texte;
        switch(etat)
 				{
						 			  case AUTEUR_B:
												 p_texte=malloc(len+1);
				 								 strncpy(p_texte,s,len);
				 								 p_texte[len+1]='\0';
				 								 printf("Auteur = %s\n",p_texte);
				 								 free(p_texte);
				 								 break;
	 								  case TITRE_B:
												 p_texte=malloc(len+1);
				 								 strncpy(p_texte,s,len);
				 								 p_texte[len+1]='\0';
				 								 printf("Titre = %s\n",p_texte);
				 								 free(p_texte);
				 								 break;
			   						case TEXTE_B:
												 p_texte=malloc(len+1);
				 								 strncpy(p_texte,s,len);
				 								 p_texte[len+1]='\0';
				 								 printf("Texte = %\n",p_texte);
				 								 free(p_texte);
				 								 break;
				  }
} |