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:
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 :)