| 12
 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
 106
 107
 108
 109
 110
 111
 112
 113
 
 | void characters(void* user_data, const xmlChar *ch, int len) {
 
	if (_inID && len) {
 
		// On va enregistrer l'ID, mais en supprimant les espaces qui semblent s'être introduits <ID> 5 </ID>
 
		while(len>1 && *ch==32) {
 
			len--;
 
			ch+=sizeof(xmlChar);
 
		}
 
 
 
		// On supprime également les espaces qui suivent la valeur.
 
		while(len>1 && *(ch+len-1)==32)
 
			len--;
 
 
 
		_concepts[_currentCpt].ID = (char*)malloc(len+1);
 
		strncpy(_concepts[_currentCpt].ID, ch, len);
 
		*(_concepts[_currentCpt].ID+len) = 0;
 
		_inID = 0;
 
	}
 
	else if ((_inIntent || _inUpperCovers || _inExtent) && len)
 
	{	
 
		// lien vers les references du concept courant
 
		REF** source;
 
		REF* ref;
 
		REF* newRef;
 
 
 
		if (_inIntent)
 
			source = &(_concepts[_currentCpt].intent);
 
		else if (_inUpperCovers)
 
			source = &(_concepts[_currentCpt].upperCovers);
 
		else if (_inExtent)
 
			source = &(_concepts[_currentCpt].extent);
 
 
 
		ref = *source;
 
 
 
		// on créé une nouvelle reference
 
		newRef = (REF*)calloc(1, sizeof(REF));
 
 
 
		// permet de relier la nouvelle reference a la structure (liste chainee)
 
		if (ref) {
 
			// La liste contient au moins une cellule.
 
			// On va parcourir la liste a la recherche de la dernière cellule (celle qui à le pointeur next à NULL)
 
			while(ref->next)
 
				ref = (REF*)ref->next;
 
			ref->next = newRef;
 
		}
 
		else
 
			*source = newRef; // Première cellule de la liste chainée
 
 
 
		// on recopie la donnée
 
		newRef->reference = (char*)malloc(len+1);
 
		strncpy(newRef->reference, ch, len);
 
		// 0 terminal de la chaine de caractères
 
		*(newRef->reference+len) = 0;	
 
 
 
		// Remise à 0 des flags de position
 
		_inIntent = _inUpperCovers = _inExtent = 0;
 
	}
 
} | 
Partager