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;
}
} |
Partager