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 :

Treeview en XML petit problèmes


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Treeview en XML petit problèmes
    Hello!
    Je doit créer un fichier XML en récupérant les valeurs d'un treeview j'ai trouver un bout de code qui fontionne presque mais je n'arrive pas a le modifier pour qu'il fasse se que je veux

    J'utilise se morceau de 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    private void LaunchWriting(string filename)
            {
                //defintion du writer qui va ecrire le document xml.
                XmlTextWriter w = new XmlTextWriter(filename, System.Text.Encoding.UTF8);
                //defintion de l'indentation
                w.Formatting = Formatting.Indented;
                w.Indentation +=2 ;
                //ecriture de la declaration xml
                w.WriteStartDocument();
                //parcours des treenodes du treeview newsML
                foreach (TreeNode tn in this.treeView1.Nodes)
                {
                    this.writeNewsML(w, tn, filename);
                }
                //fermeture du writer
                w.Close();
            }
            private void writeNewsML(XmlWriter w, TreeNode tn, string filename)
            {
                //Presence de fils => Soit un noeud pere, soit un noeud d'attributs
                //et differenciation entre les noeuds peres <pere></pere>
                //et les noeuds de valeurs <pere>valeur</pere> materialisés par la chaine "Value:"
                //precedent la dite valeur.
                if (tn.Nodes != null && !tn.Text.StartsWith("Value:"))
                {
                    //Ecriture du pere avant ses attributs
                    //Si ce n'est pas un arbre d'attributs, c'est un arbre pere.
                if (tn.Text != "Attributes")
                {
                    //Ecriture d'une balise ouvrante
                    w.WriteStartElement(tn.Text);
                    //ecriture de ses attributs. (en les faisant repasser
                    //dans la moulinette, ils tomberont dans le "else" suivant)
                    foreach (TreeNode n in tn.Nodes)
                    {
                        this.writeNewsML(w,n,filename);
                    }
                    //Ecriture de la balise fermante
                    w.WriteEndElement();
                }
                //Si ce n'est pas un pere, c'est un noeud d'attributs,
                //que l'on attribue au pere
                else
                {
                    //Ecriture des attributs de l'arbre pere :
                    //Pour chaque attribut
                    foreach (TreeNode att in tn.Nodes)
                    {
                        //Recuperation du nom de l'attribut par decoupage de la chaine selon le "=" //(il est avant le "=")
                        string attName = att.Text.Split(System.Convert.ToChar("="))[0];
                        //Recuperation dde la valuer de l'attribut selon le meme procédé.
                        string attValue = att.Text.Split(System.Convert.ToChar("="))[1];
                        //On vire les caracteres quotes (") presents de chaque coté
                        //de la valeur de l'attribut.
                        //Le fait de decouper une chaine selon un caractere vire celui-ci.
                        attValue = attValue.Split(System.Convert.ToChar("\""))[1];
                        //ecriture de l'attribut.
                        w.WriteAttributeString(attName, attValue );
                    }
                }
            }
           //Il n'y a pas de fils => les attributs ayant été traités,
            //ils ne doivent pas passer.
            //Ne doivent passer que les valeurs relatives au precedent arbre
            else if (tn.Parent.Text != "Attributes" && tn.Text != "Attributes")
            {
                w.WriteString(tn.Text.Remove(0,6));
            }
    Mon treeview ressemble a cela:

    <family>
    <parent>
    jacques
    </parent>
    <parent>
    Jean
    </parent>
    <parent>
    <child>
    toi
    </child>
    </parent>
    </family>



    Et quand je le récupère dans mon fichier XML sa donne sa :
    <?xml version="1.0" encoding="utf-8"?>
    <family>
    <parent>
    <jacques />
    </parent>
    <parent>
    <Jean />
    </parent>
    <parent>
    <child>
    <toi />
    </child>
    </parent>
    </family>


    C'est presque correcte mon seul problème c'est qu'il met aussi les valeurs dans un balise!
    Si qqun a une idée se que je dois modifier merci beaucoup d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Dans la méthode writeNewsML, il te suffit de tester si la valeur du TreeNode contient le caractère "<". Si ce n'est pas le cas, tu l'inscris dans ton XML à l'aide de la méthode WriteValue. Si c'est le cas, tu l'inscris avec WriteStartElement (puis tu fermes la balise avec WriteEndElement).

    Dans tous les cas, il va falloir essayer de comprendre un peu le fonctionnement de ce morceau de code déniché je ne sais où car il fait a priori pas mal de choses dont tu n'as pas besoin.

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

Discussions similaires

  1. Un petit problème avec XML/HTML vous pouvez le résoudre
    Par rmouads dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 30/03/2010, 12h04
  2. petit problême de lecture de xml
    Par Veler dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/12/2007, 19h08
  3. Réponses: 6
    Dernier message: 21/07/2006, 10h18
  4. Réponses: 6
    Dernier message: 08/02/2005, 18h50
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 19h55

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