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 :

XML qui ne se met pas à jour !


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut XML qui ne se met pas à jour !
    Bonjour tout le monde

    J'essaye d'ajouter une ligne à un fichier XML, seulement cette procédure ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     public static void AddSyllab(string WordTosuscribe, string path)
            {
                XDocument srcTree = new XDocument();
                XElement root1 = XElement.Load(path);
                srcTree.Add(new XElement("Root", new XElement("syllabs", new XAttribute("count", 0), WordTosuscribe)));
                IEnumerable<XElement> tests = from el in root1.Elements("root") select el;
                foreach (XElement el in tests)
                {
                    if (srcTree.Root != null) srcTree.Root.Add(el);
                }
                srcTree.Save(path);
            }
    S'il y aurait un moyen plus simple pour y parvenir ou si vous pouviez m'orienter sur ce qui ne vas pas dans cette procédure, je vous remercie d'avance !

    PS voici à quoi ressemble le XML auquel je veux rajouter une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="utf-8" ?>
    <root>
      <syllabs count="0">a</syllabs>
         ....
      <syllabs count="0">ro</syllabs>
    </root>

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Je ne sais pas si c'est lié mais j'ai un doute sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    srcTree.Add(new XElement("Root", new XElement("syllabs", new XAttribute("count", 0), WordTosuscribe)));
    Pourquoi ne pas sélectionner le noeud "/Root/syllabs" déjà existant pour lui rajouter tout simplement un élément enfant.

    Sinon, le plus simple est de débugger en pas à pas et voir que contient la variable srcTree avant de faire le .Save : Vérifier que le noeud a bien été ajouté etc ...
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par MaximePalmisano Voir le message

    Pourquoi ne pas sélectionner le noeud "/Root/syllabs" déjà existant pour lui rajouter tout simplement un élément enfant.
    C'est ce que j'ai cherché à faire, mais j'arrive à écrire un fichier, j'arrive à l'interroger, mais pas à le modifier. Je comprends pas comment faire pour dire dans root, ajoute une ligne syllabs avec l'attribut count.

    Je suis aussi coincée à un autre endroit du code où je dois update le compteur "count" dans ce même XML...

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Est ce que ceci marche ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    srcTree.Elements("Root").Elements("syllabs").FirstOrDefault();
    J'ai toujours parsé mon XML "classiquement" avec XmlDocument donc je connais pas trop LinqToXml
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    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
     
            public static void AddSyllab(string WordTosuscribe, string path, out XElement mElement)
            {
                XDocument srcTree = new XDocument();
                XElement root1 = XElement.Load(path);
                srcTree.Add(new XElement("Root", new XElement("syllabs", new XAttribute("count", 0), WordTosuscribe)));
                IEnumerable<XElement> tests = from el in root1.Elements("root") select el;
                foreach (XElement el in tests)
                {
                    if (srcTree.Root != null) srcTree.Root.Add(el);
                }
                mElement = srcTree.Elements("Root").Elements("syllabs").FirstOrDefault();
                srcTree.Save(path);
            }
    mElement me retourne la ligne que je viens d'ajouter...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    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
    public static void AddSyllab(string WordTosuscribe, string path)
            {
                XElement ElRoot = new XElement("root");
                XDocument srcTree = new XDocument(ElRoot);
                XElement root1 = XElement.Load(path);
                IEnumerable<XElement> tests = from el in root1.Elements("syllabs") select el;
                foreach (XElement el in tests)
                {
                    if (srcTree.Root != null) srcTree.Root.Add(el);
                }
                XElement newone = new XElement("syllabs", new XAttribute("count", 0), WordTosuscribe.ToLower());
                if (srcTree.Root != null) srcTree.Root.Add(newone);
                srcTree.Save(path);
            }
    Voila, j'ai trouvé mon ensemble d'erreur que j'explique ici pour ceux qui seraient un jour dans la même situation:

    La première :
    Comme j'instancie avec un "new" srcTree était donc forcément vide puisque je mettais new XDocument(); mais dans ma boucle, avant d'y ajouter un élément je faisais :
    if (srcTree.Root != null) srcTree.Root.Add(el); le document étant nul, évidement, il était toujours à true donc il n'ajoutait pas les lignes.

    La seconde :
    Mon linq faisait une requête sur Root, et me renvoyait donc l'unique élément root de mon document.

    La troisième :
    celle-ci est plus relative à mon document qu'à une erreur globale : j'ajoutais mon nouvel élément avant la boucle donc il était ajouté en premier au lieu de venir à la fin !

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    En fait, J'avais mal lu ton xml. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    XElement newElement = new XElement("syllabs", new XAttribute("count", 0), WordTosuscribe));
     srcTree.Root.Add(newElement);
    Ensuite, juste avant le Save tu regardes dans le contenu de ta variable srcTree si le noeud a bien été ajouté.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 08/07/2008, 10h36
  2. [MySQL] Date qui ne se met pas à jour
    Par caro93150 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/06/2008, 20h01
  3. AJAX - Formulaire qui ne se met pas à jour
    Par wenijah dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/11/2007, 10h31
  4. Réponses: 2
    Dernier message: 05/10/2006, 08h24
  5. Combobox.text qui ne se met pas à jour
    Par davels dans le forum Delphi
    Réponses: 6
    Dernier message: 21/08/2006, 10h29

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