IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

récuperer des données d'un fichier XML


Sujet :

Visual C++

  1. #21
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    le fichier c'était juste une idée

    voici mon pb:

    je veux mettre les login et les pass et les userlevel coresspondant dans un fichier xml
    pour que apres lorsque un utilisateur s'authentifie je teste s'il est dedans ou pas et retourner son level

    mais je vois pas comment le code que tu m a donné pourrais m'aider

    est ce que tu pourrais m'expliquer d'avantage ?

    merci beaucoups

  2. #22
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ya pas grand chose à expliquer
    tu charges ton fichier xml dans un xmldocument et ensuite tu le parses pour utiliser les xmlnodes

  3. #23
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par nico-pyright(c)
    ya pas grand chose à expliquer
    tu charges ton fichier xml dans un xmldocument et ensuite tu le parses pour utiliser les xmlnodes
    excuse moi je suis débutant

    je le charge ??
    je le parse ??

    est ce que t a un code où je peux un peu piger

  4. #24
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ahlala, faut tout faire ici

    déjà, j'aurai construit un xml qui ressemble plus à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <levels>
    	<level id="1">
    		<users>
    			<user login="login11" password="password11"/>
          <user login="login12" password="password12"/>
          <user login="login13" password="password13"/>
    		</users>
    	</level>
    	<level id="2">
    		<users>
          <user login="login21" password="password21"/>
          <user login="login22" password="password22"/>
          <user login="login23" password="password23"/>
        </users>
      </level>
    </levels>
    Ensuite, pour le parcourir, un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    using namespace System;
    using namespace System::Xml;
     
    int main()
    {
    	XmlDocument^doc = gcnew XmlDocument();
    	doc->Load("test.xml");
    	for each (XmlNode^xn in doc->ChildNodes[0]->ChildNodes)
    	{
    		if (xn->Attributes["id"]->Value == "1")
    			Console::WriteLine("Niveau 1");
    		else
    			Console::WriteLine("Niveau 2");
    		for each (XmlNode ^xcn in xn->ChildNodes[0]->ChildNodes)
    			Console::WriteLine("Login : {0}, Password : {1}", xcn->Attributes["login"]->Value, xcn->Attributes["password"]->Value);
    	}
     
    }
    Là, c'est version bourrin, il faut bien sur tester s'il y a des enfants avec HasChildNodes et vérifier que les attributs existent bien.
    Au pire, utiliser les try catch

  5. #25
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut comment ajouter des données À un fichier XML?
    merci beaucpoups

    voilà,j'ai utilisé ton code pour faire un code qui me permet de tester le login et le password que rentre l'utilisateur et retourner le niveau coresspondant ou login incorrect lorsque il coresspond à aucun login dans le fichier XML

    mtnt je veux que si l'utilisateur est de niveau 1 il pas ajouter des utilisateurs de niveau 1, 2 ,3..s'il est de niveau 2 il peut ajouter des utilisateurs de niveau 2, 3 ,..
    Donc ma question,comment pourrais-je ajouter des utilisateurs (des login et des password ) ou des levels ..des données (en géneral ) dans mon fichier XML ?

    encore merci

  6. #26
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    sur le meme principe, sauf qu'au lieu de parcourir les éléments, tu les crées, avec doc->Create...

  7. #27
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    j'ai modifié le fichier XML de telle sorte que j'ajoute l'attribut "File" à user
    et j'ai gardé le même code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <levels>
    	<level id="1">
    		<users>
    			<user login="login11" password="password11">
    				<file n="111">file111</file>
    				<file n="112">file112</file>
    			</user>
          			<user login="login12" password="password12">
    				<file n="121">file121</file>
    				<file n="122">file122</file>
    			</user>
     
    		</users>
    	</level>
    	<level id="2">
    		<users>
         			<user login="login21" password="password21"/>
          			<user login="login22" password="password22"/>
          			<user login="login23" password="password23"/>
        		</users>
      	</level>	
    </levels>
    mtnt il m'affiche rien !!il rentre pas dans la boucle ..est ce que tu sait pourquoi?et comment je pourrais aussi afficher les files associés à chaque user ?

    merci bien

  8. #28
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    t'as compris le code que je t'ai donné ?

  9. #29
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    int main()
    {
    	XmlDocument^doc = gcnew XmlDocument();
    	doc->Load("test.xml");
    	for each (XmlNode^xn in doc->ChildNodes[0]->ChildNodes)
    	{
    		if (xn->Attributes["id"]->Value == "1")
    			Console::WriteLine("Niveau 1");
    		else
    			Console::WriteLine("Niveau 2");
    		for each (XmlNode ^xcn in xn->ChildNodes[0]->ChildNodes)
    			Console::WriteLine("Login : {0}, Password : {1}", xcn->Attributes["login"]->Value, xcn->Attributes["password"]->Value);
    	}
     
    }
    oui
    le xn correspond aux levels et le xcn coresspond aux users, et tu boucle
    par contre le 0 de "ChildNodes[0]" ,je sais pas ca coresspond à quoi

    mais ce que j'ai modifié dans le fichier c'est just que j'ai ajouté un autre attribut à user qui est file (login,pass,file)
    donc le code normalement il doit rester le même non ???

  10. #30
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par ryoussef19
    j'ai modifié le fichier XML de telle sorte que j'ajoute l'attribut "File" à user
    et j'ai gardé le même code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <levels>
    	<level id="1">
    		<users>
    			<user login="login11" password="password11">
    				<file n="111">file111</file>
    				<file n="112">file112</file>
    			</user>
          			<user login="login12" password="password12">
    				<file n="121">file121</file>
    				<file n="122">file122</file>
    			</user>
     
    		</users>
    	</level>
    	<level id="2">
    		<users>
         			<user login="login21" password="password21"/>
          			<user login="login22" password="password22"/>
          			<user login="login23" password="password23"/>
        		</users>
      	</level>	
    </levels>
    mtnt il m'affiche rien !!il rentre pas dans la boucle ..est ce que tu sait pourquoi?et comment je pourrais aussi afficher les files associés à chaque user ?

    merci bien

    je crois que j'ai compris pourquoi :-)

    c'est parce que dans ma nouvelle structure dans user il y a plutot des elements (login, pass, file ) et avant les login et les pass etaient des attributs
    donc au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xcn->Attributes["login"]->Value
    comment pourrais je recuperer des elements comment pourrais je faire ?

  11. #31
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    sur le meme principe que je t'ai indiqué, tu accèdes au fils, et tu boucles sur les éléments en récupérant les attributs

  12. #32
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    j'ai essayé ca me donne rien ..il rentre pas dans la boucle en fait
    j'arrive pas à accéder ni au user login , au file non plus

    est ce que tu peux me montrer un exemple?

    merci

  13. #33
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    je comprends pas la difficulté, il suffit d'enchainer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    int main()
    {
    	XmlDocument^doc = gcnew XmlDocument();
    	doc->Load("test.xml");
    	for each (XmlNode^xn in doc->ChildNodes[0]->ChildNodes)
    	{
    		if (xn->Attributes["id"]->Value == "1")
    			Console::WriteLine("Niveau 1");
    		else
    			Console::WriteLine("Niveau 2");
    		for each (XmlNode ^xcn in xn->ChildNodes[0]->ChildNodes)
    		{
    			Console::WriteLine("   Login : {0}, Password : {1}", xcn->Attributes["login"]->Value, xcn->Attributes["password"]->Value);
    			for each (XmlNode ^xx in xcn->ChildNodes)
    				Console::WriteLine("      fichier {0}, numéro {1}", xx->InnerText ,xx->Attributes["n"]->Value);
    		}
    	}
    }

  14. #34
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    c'est ce que je fait et ca marche pas:
    ce code marchait avec l 'ancien fichier XML mais là ca marche plus avec le nouveau fichier (avec les elements , login,pass, file)
    je te montre le code comme ca tu me dira ce qui cloche !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    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
     
    String ^l = textBox1->Text;
     String ^p  = textBox2->Text;
    String ^result="";
    String ^res;
     int i = 0;
     
     
    XmlDocument^doc = gcnew XmlDocument();
    doc->Load("c:\\test.xml");
    for each (XmlNode^xn in doc->ChildNodes[0]->ChildNodes)
    {
    for each (XmlNode ^xcn in xn->ChildNodes[0]->ChildNodes)
    {
     
    if(l== xcn->Attributes["login"]->Value && p==xcn->Attributes["password"]->Value)
    {
    i=i+1;
    res = "Level "+xn->Attributes["id"]->Value->ToString();
    System::Windows::Forms::MessageBox::Show( xcn->Attributes["login"]->Value);
     
     
    }
     
    else
    result = "Retry!";
     
    for each (XmlNode ^xx in xcn->ChildNodes)
    					{System::Windows::Forms::MessageBox::Show("    fichier {0}, numéro {1}", xx->InnerText ,xx->Attributes["n"]->Value);
     
    }
    }
    }
     
     
     
    if (i==0)
    {
    				System::Windows::Forms::MessageBox::Show(result);
    }
    else
    {
    result = res ;
    				System::Windows::Forms::MessageBox::Show(result);
    i=0;
    }
     
     
    }

  15. #35
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    moi, j'ai fait ce programme avec le dernier xml que tu as donné, et il fonctionne

  16. #36
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    là j'ai testé ton code et il m'affiche tjrs rien ! je ne comprends pas

    voici mon fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <levels>
    	<level id="1">
    		<users>
    			<user login="login11" password="password11">
    				<file n="111">file111</file>
    				<file n="112">file112</file>
    			</user>
          			<user login="login12" password="password12">
    				<file n="121">file121</file>
    				<file n="122">file122</file>
    			</user>
     
    		</users>
    	</level>
    	<level id="2">
    		<users>
         			<user login="login21" password="password21"/>
          			<user login="login22" password="password22"/>
          			<user login="login23" password="password23"/>
        		</users>
      	</level>	
    </levels>

  17. #37
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ben, avec un beau copier/coller, ca marche niquel

    suis en debug pas à pas, et regarde où ca va pas.
    et ton fichier xml ? il s'appelle bien test.xml ?

    enfin, là, faut chercher un peu. En 4 secondes de debugger tu sauras où ca marche pas. C'est un outil indispensable à maitriser

  18. #38
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    j'ai trouvé l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System::Windows::Forms::MessageBox::Show("    fichier {0}, numéro {1}", xx->InnerText ,xx->Attributes["n"]->Value);
    c'est parce que j'utilisais "System::Windows::Forms::MessageBox::Show" au lieu de "Console::WriteLine" et je devais ajouter ToString !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xx->InnerText->ToString(),xx->Attributes["n"]->Value->ToString()
    merci

    juste une question un peu simple ..comment je pourrais debuger pas à pas?
    merci

  19. #39
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    imaginons que mon document XML serait comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    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
     
    <levels>
     
    	<filefree id="0">
    		<files>
    			<file name ="file01" />	
    			<file name ="file02" />	
    			<file name ="file03" />	
    		</files>
    	</filefree>
     
    	<level id="1">
    		<users>
    			<user login="login11" password="password11">
    				<file n="111">file111</file>
    				<file n="112">file112</file>
    			</user>
          			<user login="login12" password="password12">
    				<file n="121">file121</file>
    				<file n="122">file122</file>
    			</user>
     
    		</users>
    	</level>
    	<level id="2">
    		<users>
         			<user login="login21" password="password21"/>
          			<user login="login22" password="password22"/>
          			<user login="login23" password="password23"/>
        		</users>
      	</level>	
     
     
    </levels>
    c'est à dire que les "files" et les "users" sont sur le meme niveau mais ont des attributs différents

    avant ca marchait (l'ancien fichier XML) vu qu'il y avait les memes attributs : login et password

    mtnt il y a name pour files et login et password pour users

    comment je pourrais recuperer les attributs de filefree et apres les attributs de users ??

    merci

  20. #40
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    debugger : http://loulou.developpez.com/tutorie...visual-studio/

    pour ton xml, il suffit que tu testes sur le nom du noeud

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Récuperer des données dans un fichier XML/ Sitemap
    Par Maldus dans le forum ASP.NET
    Réponses: 6
    Dernier message: 07/07/2008, 17h25
  2. récuperer des données d'un fichier xml
    Par Ljungberg dans le forum XML
    Réponses: 4
    Dernier message: 13/06/2006, 09h54
  3. [XML] Integrer des données d'un fichier xml dans un autre ?
    Par vpet dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 16/03/2006, 18h41
  4. [XML] stocker des données dans un fichier XML
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/05/2005, 16h51
  5. Réponses: 3
    Dernier message: 13/12/2004, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo