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));
} |
Partager