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. #41
    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
    je teste sur le nom du noeud ca marche sur l'ancien fichier XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (xcn->Name == "file")
    System::Windows::Forms::MessageBox::Show(xcn->Attributes["name"]->Value->ToString())				
    if (xcn->Name == "user")
    System::Windows::Forms::MessageBox::Show(xcn->Attributes["login"]->Value->ToString())
    if (xcn->Name == "file1")
    {
    System::Windows::Forms::MessageBox::Show(xcn->Attributes["name1"]->Value->ToString());
    					}
    par contre quand je complique mon fichier XML c'est à dire au milieu du level 1 par exemple et au meme niveau que users, j'ajoute level1frees, il me renvoie file1 si c'est lui qui apparait en premier dans le level 1 sinon user login si c'est lui le premier (selon l'ordre dans le fichier)

    comment je pourais acceder au 2 ?

    voici mon nouveau 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <levels>
    	<filefrees id="0">
    		<files>
    			<file name ="file01" />	
    			<file name ="file02" />	
    			<file name ="file03" />	
    		</files>
    	</filefrees>
    	<level id="1">
    		<users>
    			<user login="login11" password="password11">
     
    			</user>
          			<user login="login12" password="password12">
     
    			</user>		
    		</users>
    		<level1frees>
    				<file1 name1 ="file11" />	
    				<file1 name1 ="file12" />	
    		</level1frees>
    	</level>
    	<level id="2">
    		<users>
         			<user login="login21" password="password21"/>
          			<user login="login22" password="password22"/>
          			<user login="login23" password="password23"/>
        		</users>
      	</level>	
     
     
    </levels>

  2. #42
    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 bon j'ai réussi !
    je boucle sur chacune en fonction de sa structure (ses nodes)

  3. #43
    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)
    sur le meme principe, sauf qu'au lieu de parcourir les éléments, tu les crées, avec doc->Create...
    est ce que t'as un ptit exemple de code ..par exemple si je veux ajouter un nouvel user avec un login et un password , comment je pourrais faire ?

    merci

  4. #44
    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 été voir dans msdn ces fonctions ?

  5. #45
    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
    oui mais j'ai pas trouvé comment ajouter un nouveau node mais je sais pas comment je peux ajouter des attributs dans un déjà existent comme "user"
    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    XmlDocument^doc = gcnew XmlDocument();
    doc->Load("c:\\test2.xml");
    //XmlNode^xn = doc->ChildNodes[0]->ChildNode;
    XmlElement^ root = doc->DocumentElement;
    root->SetAttribute("login","test");
     doc->Save("c:\\test2.xml");
    mais il m'ajoute l'element au débuts ..je ne sais pas comment faire pour créer un élement à un endroit donné
    j'ai essayé d'utuliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNode^xn = doc->ChildNodes[0]->ChildNode;
    mais je sais pas comment ?

  6. #46
    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
    si je prend un fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <user login="login11" password="password11">
    </user>
    et je lui applique ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    XmlDocument^doc = gcnew XmlDocument();
    doc->Load("c:\\test2.xml");
     
    XmlElement^ root = doc->DocumentElement;
    root->SetAttribute("login","test0");
    root->SetAttribute("password","test1");
    doc->Save("c:\\test2.xml");
    le fichier devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <user login="test0" password="test1">
    </user>
    donc ce qui me gène c'est que je perd le "login11" et "password11"
    ce que je veux c'est que "test0" et "test1" soient rajoutés à "login11" et "password11"

    un autre problème c'est que là ca marche mais quand "user" n'est pas au début du fichier (niveau0) par exemple au niveau 3 ca marche pas , je sais pas comment accéder au niveaux inférieurs ?

    merci

  7. #47
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    Et d'un, il ne peut y avoir qu'un seul element root dans un fichier xml selon les spécifications du w3c.
    Donc ce que je te conseille, c'est de créer un root avec un nom du style UserList.
    Ensuite, tu crées autant de xml elements que tu as de users dans ton fichier xml.
    Donc, récupère le root et fais un AddChild sur ton Root

  8. #48
    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
    16
    17
    18
    19
    20
     
    <levels>
         <level id="1">
    		<users>
    			<user login="login11" password="password11">
    					<file type="1">file111</file>
    					<file type="2">file112</file>
     
    			</user>
          			<user login="login12" password="password12">
    					<file type="1">file121</file>
    					<file type="2">file122</file>
     
    			</user>		
    		</users>
     
    	</level>
     
     
    </levels>
    voilà un exemple de fichier xml ..comment je pourrais ajouter un nouveau user
    je comprends tjrs pas ce que tu veux dire ? est ce que tu peux m'expliquer un peux plus ..
    merci

  9. #49
    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, tu cherches pas beaucoup ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	XmlDocument^doc = gcnew XmlDocument();
    	doc->Load("test.xml");
     
     
    	XmlNode^ elem = doc->CreateNode(XmlNodeType::Element, "user", nullptr);
    	XmlAttribute^ attribLogin = doc->CreateAttribute("login");
    	attribLogin->Value = "Nico";
    	elem->Attributes->Append(attribLogin);
    	XmlAttribute^ attribPwd = doc->CreateAttribute("password");
    	attribPwd->Value = "pyright";
    	elem->Attributes->Append(attribPwd);
    	elem->InnerText = "";
    	doc->ChildNodes[0]->ChildNodes[0]->ChildNodes[0]->AppendChild(elem);
    	doc->Save("test.xml");

  10. #50
    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
    dans le fichier xml ,il y a "user" dans chaque level
    donc je vois pas comment dans ce code il reconait dans quel level il faut ajouter le nouveau "user"
    c'est cette partie du code?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    elem->InnerText = "";
    doc->ChildNodes[0]->ChildNodes[0]->ChildNodes[0]->AppendChild(elem);
    merci

  11. #51
    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 oué, je suis d'accord pour dire que c'est archi-dépendant des tes noeuds ... et super pas générique

  12. #52
    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
    dsl je n ai vraiment pas compris ce que tu veux dire

    par exemple est ce que c'est possible de tester sur quel level "id", faire comme pour parcourir les noeuds mais je sais tjrs pas comment ?

    merci

  13. #53
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    Je pense qu'un petit tutoriel introductif sur les xpath ne te ferait pas de mal :
    http://jerome.developpez.com/xmlxsl/xpath/

  14. #54
    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 je peux tester dans quel node j'ajoute mon user :

    par exemple si j'ai deux levels (voir ajouter des files à un user )?
    c'est à dire au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc->ChildNodes[0]->ChildNodes[0]->ChildNodes[0]->AppendChild(elem)
    comment je pourais choisir par exemple en fct du id level ...

    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
     
    <levels>
      <level id="1">
        <users>
          <user login="login11" password="password11">
            <file type="1">file111</file>
            <file type="2">file112</file>
          </user>
          <user login="login12" password="password12">
            <file type="1">file121</file>
            <file type="2">file122</file>
          </user>
     
        </users>
      </level>
      <level id="2">
        <users>
          <user login="login21" password="password21">
            <file type="1">file211</file>
            <file type="2">file212</file>
          </user>
          <user login="login22" password="password22">
            <file type="1">file221</file>
            <file type="2">file222</file>
          </user>
        </users>
      </level>
    </levels>

  15. #55
    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é ce code et ca marche :
    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
     
    XmlDocument^doc = gcnew XmlDocument();
    	doc->Load("c:\\test2.xml");
     
     
    	XmlNode^ elem = doc->CreateNode(XmlNodeType::Element, "user", nullptr);
    	XmlAttribute^ attribLogin = doc->CreateAttribute("login");
    	attribLogin->Value = "Nico";
    	elem->Attributes->Append(attribLogin);
    	XmlAttribute^ attribPwd = doc->CreateAttribute("password");
    	attribPwd->Value = "pyright";
    	elem->Attributes->Append(attribPwd);
    	elem->InnerText = "";
    	for each (XmlNode^xn in doc->ChildNodes[0]->ChildNodes)
    	{
    		if(xn->Attributes["id"]->Value->ToString()=="2")
    		{
    			xn->ChildNodes[0]->AppendChild(elem);
    		}
    	}
     
    	//doc->ChildNodes[0]->ChildNodes[0]->ChildNodes[0]->AppendChild(elem);
    	doc->Save("c:\\test2.xml");
    mais je ne sais pas s'il y a plus simple

    juste une question pour ajouter des attributs avec des id, par exemple :
    <file id="1">file121</file> comment on fait ?

  16. #56
    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
    dans innertext si je me trompe pas

  17. #57
    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
    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
     
    XmlDocument^doc = gcnew XmlDocument();
    	doc->Load("c:\\test2.xml");
     
     
    	XmlNode^ elem = doc->CreateNode(XmlNodeType::Element, "user", nullptr);
    	XmlAttribute^ attribLogin = doc->CreateAttribute("file");
    	attribfile->Value = "Nico";
    	elem->Attributes->Append(attribfile);
     
    	elem->InnerText = "id ="1"";
    	doc->ChildNodes[0]->ChildNodes[0]->ChildNodes[0]->AppendChild(elem);
    	doc->Save("c:\\test2.xml");

  18. #58
    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
    mais non, je croyais que tu parlais du file121

    dans mon exemple, je crée des attributs, essaie le, tu verras

  19. #59
    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
    moi ce que je veux c'est ajouter un user avec un login , password (ca je sais faire ) et lui ajouter des fichiers de telle sorte que j 'ai ca à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <user login="login11" password="password11">
            <file type="1">file111</file>
            <file type="1">file112</file>
            <file type="2">file113</file>
            <file type="2">file114</file>
          </user>
    merci

  20. #60
    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, c'est un nouvel élément, sur le meme principe

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 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