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

C# Discussion :

Gestion d'un fichier XML


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 80
    Points : 54
    Points
    54
    Par défaut Gestion d'un fichier XML
    Bonjour à tous,

    J'essaie de gérer un petit système de sauvegarde / chargement via fichier XML.

    J'arrive à écrire dans un fichier en faisant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var set = new XDocument(
                        new XElement("sets",
                            new XElement("set",
                                new XElement("description",
                                    new XElement("date", txt_date_set.Text),
                                    new XElement("nom", txt_nom_set.Text)))));
    set.Save(Settings.Default.fichierXML);
    Cela fonctionne et donne par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <sets>
      <set>
        <description>
          <date>10/12/2014</date>
          <nom>Set du 10/12/2014</nom>
        </description>
      </set>
    </sets>
    Le souci est qu'à chaque fois que je clique sur Enregistrer, il réécrit le fichier hors j'aimerais que les sauvegardes que je fais se font dans un nouveau <set></set>.
    Par exemple :
    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
    <sets>
      <set>
        <description>
          <date>10/12/2014</date>
          <nom>Set du 10/12/2014</nom>
        </description>
      </set>
      <set>
        <description>
          <date>11/12/2014</date>
          <nom>Set du 11/12/2014</nom>
        </description>
      </set>
      <set>
        <description>
          <date>25/12/2014</date>
          <nom>Set de Noël</nom>
        </description>
      </set>
    </sets>
    La méthode que j'utilise est du Linq to XML si je ne dis pas de bêtises, mais je n'ai pas trouvé de solutions. Je pense que j'initialise simplement mal la chose, il faut surement que je charge et que j'ajoute à la suite ou quelque chose du genre.

    Si quelqu'un aurait une solution à mon problème je suis preneur !
    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    alors si tu veux faire une sauvegarde xml ca peut se faire en une seule ligne de code sans s'embêter
    il suffit de faire une classe contenant tous tes paramètres, avec un singleton
    et d'utiliser la classe xmlserializer, l'instance vers le fichier et réciproquement avec une ligne de code et le singleton static pour l'utilisation depuis le code

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Ah ... tu aurais un exemple de code ? Je ne connais pas du tout les singletons

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    tu cherches sur google, ya plein d'exemple d'utilisation de la serialization comme proposé par pol63.

    Après, si tu veux continuer à utiliser ton code, tu peux aussi écrire dans un fichier de façon séquentiel.

    Je pense qu'en faisant une recherche sur google, c'est aussi 5 mn à peine pour trouver du code tout fait et un exemple...

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    J'ai essayé la sérialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var s = new Set
                    {
                        Id = nomSet,
                        Details = new Details
                        {
                            Date = txt_date_set.Text,
                            Nom = txt_nom_set.Text
                        };
    var xs = new XmlSerializer(typeof(Set));
                    using (var wr = new StreamWriter(Settings.Default.fichierXML))
                    {
                        xs.Serialize(wr, s);
                    }
    Cela fonctionne mais mon souci reste le même il réecrit le fichier à chaque fois

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    si tu veux enregistrer plusieurs trucs, il faut une variable qui puisse contenir plusieurs trucs, genre une collection

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    En fait par plusieurs trucs je veux dire : par exemple,

    J'ouvre l'application et je saisis le set suivant :

    Date : 10/12/2014
    Nom : Set du 10 décembre
    J'enregistre et quitte l'application.

    J'aurais donc comme fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <sets>
     <set>
      <date>10/12/2014</date>
      <nom>Set du 10 décembre</nom>
     </set>
    </sets>
    Jusque là ça va, j'ai réussi à le faire.
    Mettons que dans deux jours je revienne et saisisse :

    Date : 12/12/2014
    Nom : Nouveau set du 12 décembre
    Si j'enregistre il va réécrire la totalité du XML avec les nouvelles données mais ce que je veux obtenir à la fin est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <sets>
     <set>
      <date>10/12/2014</date>
      <nom>Set du 10 décembre</nom>
     </set>
     <set>
      <date>12/12/2014</date>
      <nom>Nouveau set du 12 décembre</nom>
     </set>
    </sets>
    C'est en fait une gestion de profils grosso modo que je veux pouvoir enregistrer / charger / supprimer.

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    oui mais on ne travaille pas de cette manière là, si tu en supprimes un c'est plus compliqué de chercher l'endroit à supprimer

    il te faut donc sérialiser une collections de sets (par exemple, ou une classe contenant une collection)
    au démarrage du charge l'xml ca rempli la collection, puis tu en rajoutes avec .Add et tu enregistres
    tout le fichier va être réécris mais avec les anciennes données et les nouvelles

    on voit bien bien dans la structure de ton fichier que c'est une collection en plus, <sets> contient plusieurs <set>

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Ah ! Bon je vais aller me renseigner là dessus alors

Discussions similaires

  1. Choix de l'outils de gestion d'un fichier XML
    Par megamario dans le forum VB.NET
    Réponses: 3
    Dernier message: 27/05/2014, 08h18
  2. Réponses: 6
    Dernier message: 24/04/2012, 13h53
  3. [C#] Gestion d'un fichier XML.
    Par Trousse dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/03/2012, 12h14
  4. Gestion d'un fichier XML en VB 2010
    Par mandra123 dans le forum VB.NET
    Réponses: 3
    Dernier message: 31/10/2010, 14h34
  5. Gestion de fichiers xml par php
    Par omman95 dans le forum Langage
    Réponses: 6
    Dernier message: 14/10/2006, 07h30

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