Skip to content
Snippets Groups Projects
Commit 67c5084a authored by Romain Jegat's avatar Romain Jegat
Browse files

TerrainsXML terminé

parent 55c8b458
No related branches found
No related tags found
No related merge requests found
Pipeline #
#include <stdio.h>
#include <stdlib.h>
#include "TerrainsXML.h"
Case* Remplir_Terrains(FILE* Terrains_XML_log, const char *filename) /* Remplit le tableau de cases partir du fichier XML */
{
fprintf(Terrains_XML_log,"I) Chargement du fichier Terrains XML - Definition des noeuds\n");
node_t *rootXML, *TerrainsXML;
unsigned int i=0, nb_terrains=0;
rootXML = roxml_load_doc(filename); /* Ouvre le doc XML et cr le noeud de base */
TerrainsXML = roxml_get_chld(rootXML, NULL, 0); /* Descend d'un niveau dans l'arborescence */
nb_terrains = roxml_get_chld_nb(TerrainsXML); /* Rcupre le nombre de cases entres dans le fichier XML */
fprintf(Terrains_XML_log,"Le fichier contient %d terrains\n", nb_terrains);
/*---------------------------------------------------------------------------------------------------*/
fprintf(Terrains_XML_log,"II) Chargement des terrains\n");
Terrain* ListeTerrains = NULL;
ListeTerrains = malloc(nb_terrains * sizeof(Terrain)); /* Allocation de la mmoire ncssaire et test*/
if (ListeTerrains == NULL)
{
fprintf(Terrains_XML_log,"Allocation impossible \n");
exit(EXIT_FAILURE);
}
fprintf(Terrains_XML_log,"1) Memoire allouee avec succes \n");
fprintf(Terrains_XML_log,"La memoire allouee fait %d octets\n",nb_terrains * sizeof(Terrain));
/*--------------------------------------------------------------------------------------------------*/
for(i=0; i<nb_terrains; i++) /* Boucle de remplissage des cases */
{
fprintf(Terrains_XML_log,"\nChargement du terrain numero %d\n", i+1);
Terrain Terrain_en_cours;
node_t *TerrainXML;
char *id_text, *name_text, *FR_text, *FRS_text, *PDR_text, *DESC_text;
int FR_int=0, FRS_int=0, PDR_int=0;
TerrainXML = roxml_get_chld(TerrainsXML, NULL, i);
node_t *ID, *NAME, *FR, *FRS, *PDR, *DESC;
ID = roxml_get_attr(TerrainXML, "id", 0);
NAME = roxml_get_attr(TerrainXML, "name", 0);
FR = roxml_get_attr(TerrainXML, "FR", 0);
FRS = roxml_get_attr(TerrainXML, "FRS", 0);
PDR = roxml_get_attr(TerrainXML, "PDR", 0);
DESC = roxml_get_attr(TerrainXML, "Desc", 0);
id_text = roxml_get_content(ID, NULL, 0, NULL);
name_text = roxml_get_content(NAME, NULL, 0, NULL);
FR_text = roxml_get_content(FR, NULL, 0, NULL);
FRS_text = roxml_get_content(FRS, NULL, 0, NULL);
PDR_text = roxml_get_content(PDR, NULL, 0, NULL);
DESC_text = roxml_get_content(DESC, NULL, 0, NULL);
fprintf(Terrains_XML_log,"Id : %s\n", id_text);
fprintf(Terrains_XML_log,"Nom : %s\n", name_text);
fprintf(Terrains_XML_log,"FR : %s\n", FR_text);
fprintf(Terrains_XML_log,"FRS : %s\n", FRS_text);
fprintf(Terrains_XML_log,"PDR : %s\n", PDR_text);
fprintf(Terrains_XML_log,"DESC : %s\n", DESC_text);
/* Convertion des caractristiques lues vers les types de la struct Case */
FR_int = atoi(FR_text);
FRS_int = atoi(FRS_text);
PDR_int = atoi(PDR_text);
/* Remplissage des caractristiques de la classe en cours */
switch(FR_int){
case 0 :
Terrain_en_cours.franchissable=0;
break;
case 1 :
Terrain_en_cours.franchissable=1;
break;
default :
fprintf(Terrains_XML_log,"ERREUR : FR doit prendre la valeur 0 ou 1 !\n");
Terrain_en_cours.franchissable=0;
}
switch(FRS_int){
case 0 :
Terrain_en_cours.franchissable_sorts=0;
break;
case 1 :
Terrain_en_cours.franchissable_sorts=1;
break;
default :
fprintf(Terrains_XML_log,"ERREUR : FRS doit prendre la valeur 0 ou 1 !\n");
Terrain_en_cours.franchissable_sorts=0;
}
Terrain_en_cours.PD_requis=PDR_int;
strcpy(Terrain_en_cours.nomTerrain, name_text);
/* Ajout du terrain rempli au tableau */
fprintf(Terrains_XML_log,"Insertion du terrain %d dans le tableau\n", i+1);
ListeTerrains[i] = Terrain_en_cours;
/* Libration des noeuds */
roxml_free_node(ID);
roxml_free_node(NAME);
roxml_free_node(FR);
roxml_free_node(FRS);
roxml_free_node(PDR);
}
roxml_free_node(rootXML);
roxml_free_node(TerrainsXML);
return ListeTerrains;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment