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 Phone .NET Discussion :

Ajouter des noeud dans un fichier XML


Sujet :

Windows Phone .NET

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut Ajouter des noeud dans un fichier XML
    Bonjour,

    Je n'ai pas le temps d'expliquer précisément mon problème (je le ferai cet aprem surement) mais en gros je voudrais savoir comment créer un nouveau noeud à un endroit précis dans un document XML.

    Merci d'avance (j'expliquerai plus cet aprem...desolé).

    EDIT :

    En fait, J'ai un document XML qu'on appelera "doc" et à côté un Dictionnary<string key, string value> qu'on appelera "dico". Le document XML contient des balises de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <add key="nom" value="valeur"/>
    et donc le Dictionnary contient toutes les clés et valeurs associés.

    Je veux modifier le document XML en ajoutant ou en modifiant des balises du type cité plus haut. Pour cela, j'ai une méthode qui modifie ou crée une case dans "dico". Ensuite, on appelle une méthode Save() qui sauvegarde ce qui a été modifié en parcourant le Dioctionnary et à partir de là, affecter chaque valeur à la clé associée, ou créer une nouvelle balise.

    J'ai déjà fait cela sous Android avec MonoDroid, et j'ai un modèle en C# dont je m'étais inspirer. Voila ce que ça donne en c# :

    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
     
    public static void Save()
    {
         XmlDocument dom = new XmlDocument();
         XmlNode nodeAppSettings = null;
     
         dom.Load(filename);
         nodeAppSettings = dom.DocumentElement["appSettings"];
     
         foreach (string key in dico.AllKeys)
         {
              AddSetting(nodeAppSettings, key, dico[key]);
         }
         dom.Save(filename);
    }
     
    private static void AddSetting(XmlNode appSettings,string key,string value)
    {
         XmlNode appSetting = appSettings.SelectSingleNode(string.Format("add[@key='{0}']", key));
          if (appSetting == null)
          {
               appSetting = appSettings.AppendChild(appSettings.OwnerDocument.CreateElement("add"));
               appSetting.Attributes.Append(appSettings.OwnerDocument.CreateAttribute("key")).Value = key;
               appSetting.Attributes.Append(appSettings.OwnerDocument.CreateAttribute("value")).Value = value;
           } 
           else
           {
                appSetting.Attributes["value"].Value = value;
           }                        
    }
    voila ce que j'ai commencé à faire :

    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
     
    public void Save()
    {
         XDocument dom = null;
         XElement nodeAppSettings = null;
     
         using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
         {
              using (IsolatedStorageFileStream isoStream = store.OpenFile(fileName, FileMode.OpenOrCreate))
              {
                   dom = XDocument.Load(isoStream);
                   nodeAppSettings = dom.Element("appSettings");
     
                   foreach (string key in dico.Keys)
                   {
                        AddSetting(nodeAppSettings, key, (string)AppSettings[key]);
                   }
                   dom.Save(isoStream);
              }
         }
    }
     
    private void AddSetting(XElement appSettings, string key, string value)
    {
         XElement appSetting = appSettings.Element(string.Format("add[@key='{0}']", key));
         //Je n'ai rien changé ici
    }
    Là où je n'ai rien changé, c'est que je ne sais pas quoi faire...quelqu'un a une idée ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    D'abord tu crees un nouveau XElement (avec un new) puis tu l'ajoutes au XElement courant avec la methode Add.

    A la fin pour valider tu dois sauvegarde ton XDocument dans ton reader.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut
    En fait, j'ai déjà un fichier xml et je cherche surtout à modifier les attributs de certaines balise...en fait, avec le Dictionnary, on parcours et on recopie la valeur des attributs des balises en fonction des valeurs données dans le Dictionnary.

    En fait, c'est vrai que j'ai balancé mon code et je n'ai pas vraiment expliqué ce que je cherchais...Pour l'instant, j'ai une liste de balise de type <add key="attKey" value="attval" /> et j'ai une variable string "key", et je voudrais accéder à la balise dont l'attribut key est égalé à la variable "key". Par exemple, si key="utilisateur", je voudrais la balise <add key="utilisateur" .../>. Tout pour modifier ensuite la valeur de l'attribut value.

    Moi, ce que j'ai fait c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XElement appSetting = appSettings.Element(string.Format("add[@key='{0}'",key));
    Mais ça attrape une exception qui dit qu'on ne peut pas avoir de caractère "[" en argument de la méthode Element. Comment je peux faire ?

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Je comprends franchement rien ce que tu dis...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void AddSetting(XElement appSettings, string key, string value)
    {
         var newSetting = new XElement("add", new XAttribute(key, value));
         appSettings.Add(newSetting);
    }
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut
    Désolé...J'avoue que tout est brouillon dans ce que j'ai expliqué...j'ai résolu mon problème en utilisant ta solution...mais vu que j'adapte un programme à partir d'un Framework en C#, je m'en inspire pour le mettre sous Windows Phone 7...du coup je voulais refaire ce qui a été fait...mais tant pis...ça fonctionne en tout cas...

    Merci !

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

Discussions similaires

  1. [JDOM] Ajouter des éléments dans un fichier XML
    Par pitchu dans le forum Format d'échange (XML, JSON...)
    Réponses: 14
    Dernier message: 25/12/2015, 10h06
  2. Ajouter un noeud dans un fichier XML
    Par rambc dans le forum Général Python
    Réponses: 4
    Dernier message: 05/05/2010, 13h55
  3. Réponses: 5
    Dernier message: 23/04/2010, 21h26
  4. Réponses: 9
    Dernier message: 18/05/2009, 08h25
  5. Ajouter des namespace dans un fichier XML
    Par Septembre84 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/05/2008, 12h20

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