Bonjour;
Le programme suivant est censé extraire les balises d'un fichier xml et les afficher une par une:
#include <iostream>
#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>
<age>18</age>
</joueur>
<joueur>
<nom>Emmanuel Faure</nom>
<license>2222222D</licence>
<classement>30/5</classement>
<naissance>23.10.1978</naissance>
</joueur>
</joueurs>
<parties>
<partie>1234567A battu_par 7654321A</partie>
<partie>7654321A battu_par 2222222D</partie>
</parties>
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>
<age>
</age>
</classement>
</joueur>
</classement>
<joueur>
</classement>
<nom>
</nom>
<license>
</licence>
<classement>
</classement>
<naissance>
</naissance>
</joueur>
</naissance>
</joueurs>
</naissance>
<parties>
</naissance>
<partie>
</partie>
<partie>
</partie>
</parties>
</partie>
Quelqu'un peut il me dire où se situe le problème? Merci d'avance !