void startElement(void *user_data, const xmlChar *name, const xmlChar **attrs){ int i; // Si on est sur un Lattice... if (!xmlStrcmp(name, (xmlChar*)"Lattice") && attrs) { // On parcoure les attributs for (i = 0; attrs[i]; i+=2) { // Jusqu'à trouver l'atribut numberCpt if (!xmlStrcmp(attrs[i], (xmlChar*)"numberCpt")) { // Que l'on mémorise (strtol permet d'analyser la valeur texte, pour en faire une valeur numérique) _countCpt = strtol((const char*)attrs[i+1],NULL,0); _countObj = strtol((const char*)attrs[i+1],NULL,0); _countAtt = strtol((const char*)attrs[i+1],NULL,0);
void Lecture_d'une_nouvelle_balise_xml if (name = "Lattice") && il y a des attributs) { Pour chaque attribut: if (Nom de l'attribut = "numberCpt") { _countCpt = Valeur de l'attribut numberCpt (transformé en numérique)) _countObj = Valeur de l'attribut numberCpt (transformé en numérique)) _countAtt = Valeur de l'attribut numberCpt (transformé en numérique))
if (!xmlStrcmp(attrs[i], (xmlChar*)"numberCpt")) _countCpt = strtol((const char*)attrs[i+1],NULL,0); if (!xmlStrcmp(attrs[i], (xmlChar*)"numberobj")) _countObj = strtol((const char*)attrs[i+1],NULL,0); if (!xmlStrcmp(attrs[i], (xmlChar*)"numberatt")) _countAtt = strtol((const char*)attrs[i+1],NULL,0);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionvoid startElement(void *user_data, const xmlChar *name, const xmlChar **attrs){ int i; // Si on est sur un Lattice... if (!xmlStrcmp(name, (xmlChar*)"Lattice") && attrs) { // On parcoure les attributs for (i = 0; attrs[i]; i+=2) { // Jusqu'à trouver l'atribut numberCpt if (!xmlStrcmp(attrs[i], (xmlChar*)"numberCpt")) { // Que l'on mémorise (strtol permet d'analyser la valeur texte, pour en faire une valeur numérique) _countCpt = strtol((const char*)attrs[i+1],NULL,0); // on alloue un tableau qui va contenir les concepts. _concepts = (CONCEPT*)calloc(_countCpt, sizeof(CONCEPT)); break; // inutile de considérer les attributs suivants } if (!xmlStrcmp(attrs[i], (xmlChar*)"numberobj")) _countObj = strtol((const char*)attrs[i+1],NULL,0); if (!xmlStrcmp(attrs[i], (xmlChar*)"numberatt")) _countAtt = strtol((const char*)attrs[i+1],NULL,0); } } else if (!xmlStrcmp(name, (xmlChar*)"Concept") && _countCpt) _currentCpt++; else if (!xmlStrcmp(name, (xmlChar*)"Concept_Ref") && _countCpt) _inUpperCovers = 1; else if (!xmlStrcmp(name, (xmlChar*)"Attribute_Ref")) _inIntent = 1; else if (!xmlStrcmp(name, (xmlChar*)"Object_Ref")) _inExtent = 1; else if (!xmlStrcmp(name, (xmlChar*)"ID")) _inID = 1; }
Le nombre d'objet : 0
Le nombre d'attribut : 4
Le nombre de concept : 16
Le nombre d'objet : 4
Le nombre d'attribut : 4
Le nombre de concept : 16
for(i=1;i <= N;i++) { sprintf(tmp,"input%d",i); lire_fichier(tmp); //le même traitement X .......... ............ }
<galicia_document> <lattice numberobj= "4" numberatt="4" numbercpt="16"> <name>lattice(ctx_0)</name> <object>3</object> <object>2</object> <object>1</object> <object>4</object> d b c a <concept> 1 <extent> <object_ref>3</object_ref> <object_ref>2</object_ref> <object_ref>1</object_ref> <object_ref>4</object_ref> </extent> </concept> <concept> 16 <extent> <object_ref>2</object_ref> <object_ref>1</object_ref> <object_ref>4</object_ref> </extent> d <concept_ref>1</concept_ref> </concept> <concept> 2 <extent> <object_ref>3</object_ref> <object_ref>2</object_ref> <object_ref>1</object_ref> </extent> a <concept_ref>1</concept_ref> </concept> <concept> 8 <extent> <object_ref>3</object_ref> <object_ref>2</object_ref> <object_ref>4</object_ref> </extent> c <concept_ref>1</concept_ref> </concept> <concept> 4 <extent> <object_ref>3</object_ref> <object_ref>1</object_ref> <object_ref>4</object_ref> </extent> b <concept_ref>1</concept_ref> </concept> <concept> 14 <extent> <object_ref>1</object_ref> <object_ref>4</object_ref> </extent> d b <concept_ref>16</concept_ref> <concept_ref>4</concept_ref> </concept> <concept> 15 <extent> <object_ref>2</object_ref> <object_ref>1</object_ref> </extent> d a <concept_ref>16</concept_ref> <concept_ref>2</concept_ref> </concept> <concept> 6 <extent> <object_ref>3</object_ref> <object_ref>4</object_ref> </extent> b c <concept_ref>8</concept_ref> <concept_ref>4</concept_ref> </concept> <concept> 3 <extent> <object_ref>3</object_ref> <object_ref>1</object_ref> </extent> b a <concept_ref>2</concept_ref> <concept_ref>4</concept_ref> </concept> <concept> 13 <extent> <object_ref>2</object_ref> <object_ref>4</object_ref> </extent> d c <concept_ref>16</concept_ref> <concept_ref>8</concept_ref> </concept> <concept> 7 <extent> <object_ref>3</object_ref> <object_ref>2</object_ref> </extent> c a <concept_ref>2</concept_ref> <concept_ref>8</concept_ref> </concept> <concept> 10 <extent> <object_ref>2</object_ref> </extent> d c a <concept_ref>15</concept_ref> <concept_ref>13</concept_ref> <concept_ref>7</concept_ref> </concept> <concept> 11 <extent> <object_ref>1</object_ref> </extent> d b a <concept_ref>14</concept_ref> <concept_ref>15</concept_ref> <concept_ref>3</concept_ref> </concept> <concept> 5 <extent> <object_ref>3</object_ref> </extent> b c a <concept_ref>6</concept_ref> <concept_ref>3</concept_ref> <concept_ref>7</concept_ref> </concept> <concept> 12 <extent> <object_ref>4</object_ref> </extent> d b c <concept_ref>14</concept_ref> <concept_ref>6</concept_ref> <concept_ref>13</concept_ref> </concept> <concept> 9 <extent> </extent> d b c a <concept_ref>10</concept_ref> <concept_ref>11</concept_ref> <concept_ref>5</concept_ref> <concept_ref>12</concept_ref> </concept> </lattice> </galicia_document>
void DisplayConceptInfos(int index, int showExtent, FILE *fp) { REF* ref; // On valide la valeur de l'index if (index> =0 && index<_countCpt) { if (showExtent) { ref = _concepts[index].extent; if (ref) { while (ref) { if (ref->reference) fprintf(fp,"%s ", ref->reference); ref = ref->next; } fprintf(fp,": "); } } ref = _concepts[index].intent; if (_concepts[index].extent && ref) { while (ref) { if (ref->reference) fprintf(fp,"%s ", ref->reference); ref = ref->next; } fprintf(fp,"\n"); } } }
typedef struct REF { char* reference; // la donnée proprement dite //void* next; struct REF* next; // pointeur vers la reference suivante (ou 0 s'il n'y a plus de donnée) }REF; // Structure décrivant les <Concept> typedef struct { char* ID; // Valeur de l'Id REF* intent; // Liste des de l' REF* upperCovers; // Liste des <Concept_Ref> de l' REF* extent; // Liste des <Object_Ref> de l'<extent> } CONCEPT ;
Le but est tout de même que tu en tires des leçons, que tu analyses ce qui t'es proposé pour en apprendre quelque chose, non ?
tu veux savoir comment récupérer les infos du tableau _concepts ?
tu veux savoir comment récupérer les infos du tableau _concepts ?
c'est très précisément ce que fait DisplayConceptInfos [...]
ici, on y génère un fichier resultat.txt, mais on aurait très ben pu calculer le minimum dans tel ou tel cas...
_Concepts[0]
..intent =>..attribute_ref
.............next...=>..attribute_ref
........................next...=>...attribute_ref
....................................next.=.NULL
_Concepts[1]
..intent =>..attribute_ref
.............next...=>..attribute_ref
........................next.=.NULL
Sais tu ce qu'est une liste chaînée ?
T'es tu renserigné sur la chose ?