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

ASP.NET Discussion :

Problème avec mon xml


Sujet :

ASP.NET

Vue hybride

Sol1d3 Problème avec mon xml 12/03/2010, 23h01
Immobilis Salut, Tu devrais faire... 13/03/2010, 13h09
cybermaxs Salut, Pour revenir sur la... 13/03/2010, 14h42
Sol1d3 ok, je vais essayer vos deux... 13/03/2010, 21h24
Sol1d3 Merci problème résolu mais... 17/03/2010, 14h09
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Par défaut Problème avec mon xml
    Tout d'abord bonjour à tous, je suis tout nouveau sur ce forum, je ne sait pas si je poste dans la bonne section, veuillez m'en excuser.
    Je développe actuellement un site Web en asp.net et il se trouve que j'ai un problème.

    Je voudrais créer un fichier XML avec cette structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="utf-8"?>
    <Racine>
      <Profil id="test">
        <option1>False</option1>
        <option2>True</option2>
      </Profil>
      <Profil id="test2">
        <option1>False</option1>
        <option2>True</option2>
      </Profil>
    </Racine>
    Et je voudrais rajouter un (ou des, le nombre de profil n'étant pas fixe) nouveau profil et ces options à la suite.
    J'ai essayé de la manière suivante :

    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
     xmlDoc.Load(strFilename);
     
                        XmlElement elmRoot = xmlDoc.DocumentElement;
                        XmlElement elmProfil = xmlDoc.CreateElement("Profil");
                        XmlElement elmopt1 = xmlDoc.CreateElement("option1");
                        // Ajouter l'attribut Id.
                        XmlAttribute newAttr = xmlDoc.CreateAttribute("id");
                        newAttr.Value = TextBoxName.Text;
                        elmProfil.Attributes.Append(newAttr);
                        //Noeud Profil
                        XmlText Profil = xmlDoc.CreateTextNode("true");
                        elmRoot.AppendChild(elmProfil);
                        elmRoot.LastChild.AppendChild(Profil);
                        elmRoot.AppendChild(xmlDoc.CreateWhitespace("\r\n\t\t"));
    //Noeud  opt1
                        XmlText opt1= xmlDoc.CreateTextNode(Checkboxcalldate.Checked.ToString());
                        elmRoot.AppendChild(elmopt1);
                        elmRoot.LastChild.AppendChild(opt1);
                        elmRoot.AppendChild(xmlDoc.CreateWhitespace("\r\n\t\t"));
                        elmRoot.AppendChild(xmlDoc.CreateWhitespace("\r\n"));
     
                        xmlDoc.Save(strFilename);
    Avec ce code j'obtiens une structure de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Racine>
      <Profil id="test">true</Profil>
    		<opt1>False</opt1>
    		
    </Racine>
    J'ai vraiment un problème avec le nœud profil, je le crée avec xmlElement, alors que je pense qu'il faudrait avec un xmlNode mais je n'y arrive pas. Je voudrait d'abord réussir à avoir la bonne structure.

    Je vous remercie d'avance de votre aide

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Tu devrais faire appel à la serialisation XML d'objets. Cela permet de créer des fichiers XML à partir d'objets .Net.

    En pratique:
    1. Tu créés un objet métier (une classe) sérialisable
    2. Tu le serialise au format 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Configuration;
    using System.Xml.Serialization;
    using System.IO;
     
    namespace ConsoleApplication
    {
        public class Program
        {
            [Serializable]
            public class Profil
            {
                [XmlAttribute]
                public string id;
                public bool option1;
                public bool option2;
            }
     
            static void Main(string[] args)
            {
                Profil p = new Profil();
                p.id = "ABC123";
                p.option1 = true;
                p.option2 = false;
     
                List<Profil> liste = new List<Profil>();
                liste.Add(p);
                liste.Add(p);
                liste.Add(p);
     
                XmlSerializer serializer = new XmlSerializer(typeof(List<Profil>), new XmlRootAttribute("root"));
                using (MemoryStream mem = new MemoryStream())
                {
                    serializer.Serialize(mem, liste);
     
                    using (FileStream fs = new FileStream("C:\\temp\\test.xml", FileMode.Create))
                    {
                        using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
                        {
                            sw.Write(Encoding.UTF8.GetString(mem.ToArray()));
                        }
                    }
                }
                Console.WriteLine("Done. Press a key.");
                Console.ReadLine();
            }
        }
    }
    Ce qui donne
    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
    <?xml version="1.0"?>
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Profil id="ABC123">
        <option1>true</option1>
        <option2>false</option2>
      </Profil>
      <Profil id="ABC123">
        <option1>true</option1>
        <option2>false</option2>
      </Profil>
      <Profil id="ABC123">
        <option1>true</option1>
        <option2>false</option2>
      </Profil>
    </root>
    Le gros avantage de cette méthode c'est que tu peux en plus faire l'opération inverse de recréer ta liste d'objets à partir du XML.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Salut,

    Pour revenir sur la méthode xml, tu ajoutes l'option sur le mauvais élément. Tu places l'option sur elmRoot, c'est à dire la racine. Il faudrait la mettre sur le noeud Profil.

  4. #4
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Par défaut
    ok, je vais essayer vos deux solutions et je vous tiens au courant, je vous remercie

  5. #5
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Par défaut
    Merci problème résolu mais j'ai de nouveau un problème,

    je voudrai pouvoir ajouter un nouveau nœud profil avec un id différent du premier, j'ai essayé avec p.AddRange(liste), ou un p.insert(p) mais ca me rajoute le nouveau nœud avec les même information et/ou ca m'écrase le premier nœud.

    De plus je ne sais pas combien de nœud au total j'utiliserai, je voudrais faire une boucle qui m'ajoute un nœud à chaque fois que je clique sur mon bouton.

  6. #6
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Qu'est-ce que tu entends par noeud? Tu veux dire un élément "Profil"? As-tu essayé la solution que je t'ai présenté? Avec elle, il te suffit d'ajouter un élément à la liste et ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                List<Profil> liste = new List<Profil>();
                liste.Add(p);
                liste.Add(p);
                liste.Add(p);
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

Discussions similaires

  1. Problème avec mon fichier web.xml
    Par snake264 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 10/09/2011, 18h25
  2. problème avec mon lecteur CD
    Par leo13 dans le forum Périphériques
    Réponses: 3
    Dernier message: 16/08/2005, 11h21
  3. [Tomcat] Problème avec web.xml
    Par hichamus dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/03/2005, 16h57
  4. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46

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