Lecture d'un fichier et affichage de balises

Résolu
SpiritAnghell Messages postés 19 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 7 mai 2008 - 24 oct. 2005 à 13:42
SpiritAnghell Messages postés 19 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 7 mai 2008 - 24 oct. 2005 à 16:06
Bonjour;

Le programme suivant est censé extraire les balises d'un fichier xml et les afficher une par une:
#include
#include <string>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;



string parseur(FILE *file)
{
char ligne[256];
string res="NULL";
char balise[50];
int j,k;
vector<string> v;
while( fgets(ligne, sizeof(ligne), file) )
{

for(int i=0;i<sizeof(ligne);i++)
{


if(ligne[i]=='<')
{
j=i;
k=0;
while(ligne[j]!='>')
{

balise[k]=ligne[j];
j++;
k++;
}
balise[k]='>';
balise[k+1]='\0';
cout << balise << endl;
i=j;
}
}
//v.push_back(ligne);
}
return res;
}



int main()
{
char sub[50];
int i=0,cpt=0,cpt1=0,cpt2=0;
string error;


cout << "Quel fichier voulez-vous annalyser? Il doi être dans le répertoire courant." << endl;
cin >> sub;
// le constructeur de ifstream permet d'ouvrir un fichier en lecture
FILE *file = fopen(sub, "r");


if ( file ) // ce test échoue si le fichier n'est pas ouvert
{
// cette boucle s'arrête dès qu'une erreur de lecture survient
parseur(file);
}


system("pause"); // à retirer sous unix
return 0;
}

Le fichier xml est le suivant:
<joueurs>
<joueur>
<nom>Jean-Marc Boutinaud</nom>
<mail>JMBoutinaud@wanadoo.fr</mail>
<licence>1234567A</licence>
<classement>30/4</classement>
</joueur>
<joueur>
<nom>Jeremy Dauchin</nom>
<license>7654321A</licence>
<classement>30/5</classement>
18
</joueur>
<joueur>
<nom>Emmanuel Faure</nom>
<license>2222222D</licence>
<classement>30/5</classement>
<naissance>23.10.1978</naissance>
</joueur>
</joueurs>

1234567A battu_par 7654321A

7654321A battu_par 2222222D

Le problème vient du fait que certaines balises s'affichent plusieurs fois, puisque j'obtiens le résultat suivant:
<joueurs>
<joueur>
<nom>
</nom>
<mail>
</mail>
<licence>
</licence>
<classement>
</classement>
</joueur>
</classement>
<joueur>
</classement>
<nom>
</nom>
<license>
</licence>
<classement>
</classement>

</classement>
</joueur>
</classement>
<joueur>
</classement>
<nom>
</nom>
<license>
</licence>
<classement>
</classement>
<naissance>
</naissance>
</joueur>
</naissance>
</joueurs>
</naissance>

</naissance>

Quelqu'un peut il me dire où se situe le problème? Merci d'avance !

2 réponses

MNEMONIC Messages postés 59 Date d'inscription dimanche 19 décembre 2004 Statut Membre Dernière intervention 1 septembre 2006
24 oct. 2005 à 15:36
Si tu mets cout << "ligne : " << ligne << endl;
juste avant le for, tu verras d'où vient l'erreur...

Pour corriger, ajoute
strncpy(ligne,"\0",256);
juste à la fin de ton while (il vide ton buffer).

while (blabla)
{
...
strncpy(ligne,"\0",256);
}
3
SpiritAnghell Messages postés 19 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 7 mai 2008
24 oct. 2005 à 16:06
merci beaucoup, ca marche!
0
Rejoignez-nous