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

Windows Forms Discussion :

[C#][1.1] Rajouter Noeud Fichier XML (plus complexe qu'un rajout basique)


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Par défaut [C#][1.1] Rajouter Noeud Fichier XML (plus complexe qu'un rajout basique)
    Bonjour

    Oui comme je l'ai précisé c'est plus complexe qu'un simple rajout
    Je suis allée dans la MSDN, j'ai trouvé comment rajouter un noeud (appendchild) mais c'est plus complexe que ça en fait ce que je souhaite faire

    Alors voici le fichier que j'ai à la base :

    <?xml version="1.0"?>

    <labanquedusud>
    <compte>
    <numero_compte>123</numero_compte>
    <nom_client>dupont</nom_client>

    <operations>

    <operation order="1">
    <intitule>Virement</intitule>
    <debit>0</debit>
    <credit>100</credit>
    </operation>
    <operation order="2">
    <intitule>Carrefour</intitule>
    <debit>50.80</debit>
    <credit>0</credit>
    </operation>
    <operation order="3">
    <intitule>Restaurant</intitule>
    <debit>78.10</debit>
    <credit>0</credit>
    </operation>
    <operation order="4">
    <intitule>Essence</intitule>
    <debit>28</debit>
    <credit>0</credit>
    </operation>
    <operation order="5">
    <intitule>SNCF</intitule>
    <debit>9.20</debit>
    <credit>0</credit>
    </operation>

    </operations>
    </compte>
    </labanquedusud>
    J'ai donc une application toute bete qui charge le fichier (dataset etc ... merci a shimOn )

    Je souhaite rajouter une ligne qui sera en fait le virement de ce compte vers un autre ou d'un autre vers ce compte.
    Le montant est entré dans une textbox et les comptes sont choisis dans deux combobox (d'ou les nom de fichiers sans extension )

    Je souhaite donc dire a l'ami que je veux rajouter mon noeud apres le order id=5, mais le probleme c'est que j'ai beau chercher je vois pas.
    Voici où est ce que je veux en venir :

    <?xml version="1.0"?>

    <labanquedusud>
    <compte>
    <numero_compte>123</numero_compte>
    <nom_client>dupont</nom_client>

    <operations>

    <operation order="1">
    <intitule>Virement</intitule>
    <debit>0</debit>
    <credit>100</credit>
    </operation>
    <operation order="2">
    <intitule>Carrefour</intitule>
    <debit>50.80</debit>
    <credit>0</credit>
    </operation>
    <operation order="3">
    <intitule>Restaurant</intitule>
    <debit>78.10</debit>
    <credit>0</credit>
    </operation>
    <operation order="4">
    <intitule>Essence</intitule>
    <debit>28</debit>
    <credit>0</credit>
    </operation>
    <operation order="5">
    <intitule>SNCF</intitule>
    <debit>9.20</debit>
    <credit>0</credit>
    </operation>
    <operation order="6">
    <intitule>Virement</intitule>
    <debit>60</debit>
    <credit>0</credit>
    </operation>
    </operations>
    </compte>
    </labanquedusud>
    j'arrive bien à quelque chose avec ce 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    	public void AjouterDataXML(String str, Form1 Feuille1, String montant)
    		{
    			String debit;
    			String credit;
    			String Compte = Feuille1.comboBox1.Text;
    			String FicEnreg = str;
    			XmlNodeList ListeNoeud2;
    			XmlDocument XmlDoc = new XmlDocument();
    			XmlDoc.Load(str+=".xml");
    //			ListeNoeud = XmlDoc.SelectNodes("/labanquedusud/compte");
    			ListeNoeud2 = XmlDoc.SelectNodes("/labanquedusud/compte/operations/operation");
     
     
     
    			if (str!=Compte)
    			{
    				credit=montant;
    				debit="0";
    			}
    			else
    			{
    				credit="0";
    				debit=montant;
    			}
     
    			XmlNode node = XmlDoc.DocumentElement;
    			XmlElement element = XmlDoc.CreateElement("Intitule");
    			element.InnerText="Virement";
    			XmlElement element2 = XmlDoc.CreateElement("Debit");
    			element2.InnerText=debit;
    			XmlElement element3 = XmlDoc.CreateElement("Credit");
    			element3.InnerText=credit;
     
    			node.AppendChild(element);
    			node.AppendChild(element2);
    			node.AppendChild(element3);
     
    //			Feuille1.label2.Text = node.LastChild.InnerText;
    			FicEnreg = FicEnreg+="2";
    			XmlDoc.Save(FicEnreg+=".xml");
     
    		}
    Mais bien sur ce n'est pas encore ça

    il me créer logiquement ce fichier :

    <?xml version="1.0"?>
    <labanquedusud>
    <compte>
    <numero_compte>123</numero_compte>
    <nom_client>dupont</nom_client>
    <operations>
    <operation order="1">
    <intitule>Virement</intitule>
    <debit>0</debit>
    <credit>100</credit>
    </operation>
    <operation order="2">
    <intitule>Carrefour</intitule>
    <debit>50.80</debit>
    <credit>0</credit>
    </operation>
    <operation order="3">
    <intitule>Restaurant</intitule>
    <debit>78.10</debit>
    <credit>0</credit>
    </operation>
    <operation order="4">
    <intitule>Essence</intitule>
    <debit>28</debit>
    <credit>0</credit>
    </operation>
    <operation order="5">
    <intitule>SNCF</intitule>
    <debit>9.20</debit>
    <credit>0</credit>
    </operation>
    </operations>
    </compte>
    <Intitule>Virement</Intitule>
    <Debit>0</Debit>
    <Credit>50</Credit>
    </labanquedusud>
    Alors voilà je ne sais pas comme lui dire hé ho il faut l'ajouter apres le dernier enfant de operation (LastChild ???) et prendre le order et faire +1

    Si vous avez une idée

    Merci beaucoup !!


    Environnement: Visual Studio .net 2003 fr

    Framework: Version 1.1.4322

    OS: Microsoft Windows Server 2003 fr

  2. #2
    Membre confirmé Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Par défaut
    Un peu de remontage avant diner
    Je m'y suis encore remise cet après midi mais sans succès

    Merci de votre aide

  3. #3
    Membre expérimenté Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Par défaut
    Salut,
    tu ne lit pas ce fichier avec un DataSet (cf l'autre post) ?
    Si oui ne peux-tu pas charger le DataSet puis ajouter une DataRow à la suite ?
    Mais je ne suis pas sûr d'avoir complètement compris tes attentes...

  4. #4
    Membre confirmé Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Par défaut
    Bonjour !! merci de m'avoir répondue

    je vais essayer d'expliquer plus simplement !!
    Le dataset ne me permet uniquement de faire le lien entre mon fichier xml et ma grille d'affichage rien de plus.
    Je n'inscris rien dans le datagrid.
    L'opération d'ajout du noeud doit se réaliser suite au clic sur le bouton valider.
    Mais je vais vous faire un schéma récapitulatif, c'est plus aisé pour comprendre

    Merci encore pour votre aide !!

  5. #5
    Membre confirmé Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Par défaut
    Voici donc le schéma explicatif

    ICI

    j'espere que c'est assez clair et pas trop fouilli au moindre souci de clarté il ne faut pas hésiter à me demander.

    Je souhaite donc ajouter un noeud au fichier XML mais ce noeud doit etre placé a la suite du dernier order.
    Ensuite ce n'est pas le dataset qui ajoute l'information mais juste des selection de comptes (fichiers xml) et un montant saisi dans la deuxieme textbox.
    ces élements sont passés en parametres dans la fonctions d'ajout du noeud.
    Voila

    Merci de votre aide !

  6. #6
    Membre expérimenté Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Par défaut
    Re,
    beau schema ! (bien que je n'ai pas compris pourquoi il y a deux combo en bas pour la liste des fichiers XML du repertoire courant mais le souci n'est pas là...)
    Si je reprends tu veux ajouter ça à la fin de ton fichier xml :
    Citation Envoyé par ton fichier XML
    <operation order="6">
    <intitule>Virement</intitule>
    <debit>60</debit>
    <credit>0</credit>
    </operation>
    ce que je trouve bizarre c'est le format de ton fichier xml, en fait je n'ai pas l'habitude de travailler avec ce format car du coup là tu dois avoir au moins 3 DataTable dans ton DataSet.
    Voici un fichier type dans mes appli :
    Citation Envoyé par mon fichier XML
    <?xml version="1.0" standalone="yes"?>
    <AdresseBus>
    <AdBus>
    <NumBus>Serveur</NumBus>
    <Adresse>192.168.0.1</Adresse>
    </AdBus>
    <AdBus>
    <NumBus>PCcar RJ45</NumBus>
    <Adresse>192.168.0.93</Adresse>
    </AdBus>
    <AdBus>
    <NumBus>PCcar Wifi</NumBus>
    <Adresse>192.168.0.96</Adresse>
    </AdBus>
    </AdresseBus>
    là du coup je n'ai qu'une table et je n'ai plus qu'a faire un ajout de rows dans ma table.
    Le truc c'est que je ne vois pas comment faire dans ton cas, il faudrait faire des ajouts de rows en parrallèle dans plusieurs tables.
    J'avoue que je ne vois pas trop.
    C'est dommage car le fait de travailler sur les DataSet est hyper simple.
    Après il ne reste plus qu'a faire un .WriteXMl...
    Je ne sais pas si j'ai vraiment fait avancer le shimili mais si ça peut te donner une piste...

  7. #7
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par Laeticia
    Alors voilà je ne sais pas comme lui dire hé ho il faut l'ajouter apres le dernier enfant de operation (LastChild ???) et prendre le order et faire
    Tu ne crées pas de noeud "operation", donc tu casses la logique de ton fichier Xml

    Donc tout d'abord, déterminer le nouvel "order" (en supposant qu'ils soient dans l'ordre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int lastIndex = ListeNoeud2.Count - 1;
    int nextOrder = Convert.ToInt32(ListeNoeud2[lastIndex].Attributes[0].Value) + 1;
    Ensuite, créer le nouveau noeud "operation"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    XmlNode parent = ListeNoeud2[0].ParentNode;
    XmlElement newNode = XmlDoc.CreateElement("operation");
    newNode.Attributes.Append(XmlDoc.CreateAttribute("order"));
    newNode.Attributes[0].Value = nextOrder.ToString();
    parent.AppendChild(newNode);
    Ensuite ajouter les enfants de ce nouveau noeud
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    XmlElement element = XmlDoc.CreateElement("Intitule");
    element.InnerText = "Virement";
    XmlElement element2 = XmlDoc.CreateElement("Debit");
    element2.InnerText = debit;
    XmlElement element3 = XmlDoc.CreateElement("Credit");
    element3.InnerText = credit;
    newNode.AppendChild(element);
    newNode.AppendChild(element2);
    newNode.AppendChild(element3);

  8. #8
    Membre confirmé Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Par défaut
    Citation Envoyé par StormimOn
    Tu ne crées pas de noeud "operation", donc tu casses la logique de ton fichier Xml

    Donc tout d'abord, déterminer le nouvel "order" (en supposant qu'ils soient dans l'ordre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int lastIndex = ListeNoeud2.Count - 1;
    int nextOrder = Convert.ToInt32(ListeNoeud2[lastIndex].Attributes[0].Value) + 1;
    Ensuite, créer le nouveau noeud "operation"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    XmlNode parent = ListeNoeud2[0].ParentNode;
    XmlElement newNode = XmlDoc.CreateElement("operation");
    newNode.Attributes.Append(XmlDoc.CreateAttribute("order"));
    newNode.Attributes[0].Value = nextOrder.ToString();
    parent.AppendChild(newNode);
    Ensuite ajouter les enfants de ce nouveau noeud
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    XmlElement element = XmlDoc.CreateElement("Intitule");
    element.InnerText = "Virement";
    XmlElement element2 = XmlDoc.CreateElement("Debit");
    element2.InnerText = debit;
    XmlElement element3 = XmlDoc.CreateElement("Credit");
    element3.InnerText = credit;
    newNode.AppendChild(element);
    newNode.AppendChild(element2);
    newNode.AppendChild(element3);

    Bonjour !!

    Merci !! ça fonctionne mais il y a encore un mais

    désolée

    alors il rajoute correctement le noeud l'order etc parfait nickel chrome, mais il ne le fait qu'une fois en fait je m'explique

    je prend le fichier plus haut, il le rajoute le order="6" a la fin bien placé et tout mais ce que je comprend pas en fait
    c'est si je veux faire un autre virement a la suite, ce qu'il fait et c'est ça que je capte pas !!! il remplace les données de l'order="6", il ne rajoute pas un noeud order="7"
    C'est pas logique car dans les variables et tt il renvoie bien les données, il fait sont count et tt il rajoute 1 a la liste, et il fait des append alors pourquoi il fait un remplacement

    pareil si je prend un fichier raccourci avec 3 order, il me rajoutera un 4eme nickel, mais si je veux rajouter un 5eme ben il remplacera uniquement le 4eme (en remettant l'order 4).

    Alors je ne sais pas je teste et teste encore !!!!
    Tant c'est devant mon nez et je vois pas (j'espere que c'est que ça )

    Merci pour votre aide et votre apport de clarté

  9. #9
    Membre expérimenté Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Par défaut
    Bonjour,
    un truc peut-être bête mais je ne vois pas ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlDoc.Save(strFileXML)

  10. #10
    Membre confirmé Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Par défaut
    Citation Envoyé par toniolol
    Bonjour,
    un truc peut-être bête mais je ne vois pas ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlDoc.Save(strFileXML)

    oui normal c'est après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [...]
    			newNode.AppendChild(element2);
    			newNode.AppendChild(element3);
     
     
    			FicEnreg = FicEnreg+="2";
    			XmlDoc.Save(FicEnreg+=".xml");
    sinon oui je regarde bien le bon fichier XML



    (attention je me suis peut etre mal exprimé !!!!)

    le premier virement fonctionne !!
    il ajoute bien un order=le dernier +1"
    mais si je refait un autre virement, il ne rajoute pas ce virement
    il prend le dernier et change les valeurs
    (c'est ce qui se passe à l'écran !!)
    peut etre que d'un point de vue c# ce n'est pas ça

    Merci de votre aide !!!

  11. #11
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par Laeticia
    mais si je refait un autre virement, il ne rajoute pas ce virement. Il prend le dernier et change les valeurs.
    On peut avoir le code complet en ce qui concerne ces rajouts ? Pour voir la manière de procéder.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] importer un noeud d'un fichier xml et le coller dans un autre fichier
    Par iznogoud36 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/06/2006, 12h55
  2. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 17h38
  3. [xml vs IE] IE n ouvre plus mes fichiers Xml
    Par wodel dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 01/03/2006, 12h38
  4. [VB.NET] [XML] Suppression d'un noeud dans un fichier XML
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2004, 11h24

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