Generer Xml à partir d'un TreeNodeCollection (TreeView) [Résolu]

Signaler
Messages postés
63
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
27 janvier 2009
-
Messages postés
63
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
27 janvier 2009
-
Bonjour,
j'ai beaucoup de mal a générer un document XML representatif d'un Treeview.

Quelqu'un aurait-il une solution ?

Aprés l'effort, le reconfort... http://ip2x.free.fr/tracks/part4
A voir également:

7 réponses

Messages postés
63
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
27 janvier 2009

Voila c'est là : http://www.csharpfr.com/code.aspx?ID=42083

En esperant que ça aide d'autres personnes.

Aprés l'effort, le reconfort... http://ip2x.free.fr/tracks/part4
Messages postés
268
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
11
Salut, tiens essaie ça (après à toi d'adapter ce code en fonction de ton treeview, là j'ai fait ça en 8 minutes )

public

void WriteTreeView(
TreeView tw)
{

   // Création du fichier
   m_xmlWriter =
new
XmlTextWriter(
"TestTreeView.xml",
Encoding.UTF8);

 
// Pour les sauts de ligne
  m_xmlWriter.Formatting =
Formatting.Indented;

  // Amorce
  m_xmlWriter.WriteStartDocument();

 
// Racine
  m_xmlWriter.WriteStartElement(
"TreeViewNodes");

 
// Pour chaque noeud
  for (
int i = 0; i < tw.Nodes.Count;i++)
 {
     m_xmlWriter.WriteElementString(
"Noeud", tw.Nodes[i].Text);

    
if (tw.Nodes[i].Nodes !=
null)
    {
       
for (
int j = 0; j < tw.Nodes[i].Nodes.Count; j++)
       {
               m_xmlWriter.WriteElementString(
"SousNoeud", tw.Nodes[i].Nodes[j].Text);
       }
    }
  }

 
// Fin racine
  m_xmlWriter.WriteEndElement();

  // Fin amorce
  m_xmlWriter.WriteEndDocument();

  // Vide le cache
  m_xmlWriter.Flush();

  // Fermeture du fichier
  m_xmlWriter.Close();  m_xmlWriter =

null;
}
Messages postés
63
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
27 janvier 2009

Avant tout merci de ta reponse. Cependant, ça ne marche pas...
Je sais ecrire du xml en c# no prob, le soucis est que je dois etre en mesure de generer un document Xml a partir de n'importe quel TreeView, je bute sur l'algo...

Mes Treeviews sont basés sur cet exemple :

Racine
|_Noeud1
|   |_Attributs
|   |    |_att1=v1
|   |    |_att2=v2
|   |_Noeud2
|      |_ValNoeud2
| _Noeud3
|...

le mieux que j'arriv a obtenir est le resultat suivant :
<Racine>
    <Noeud1 att1=v1 att2=v2>
        <Noeud2>valNoeud2</Noeud2>
        <Noeud3></Noeud3>
    </Noeud1>
</Racine>

le bon resultat etant  :
<Racine>

    <Noeud1 att1=v1 att2=v2>

        <Noeud2>valNoeud2</Noeud2>
    </Noeud1>

    <Noeud3></Noeud3>

</Racine>

il apparait tres difficile de fermer la bonne balise au bon moment...

Enfin. Si quelqu'un aime les defis...

Aprés l'effort, le reconfort... http://ip2x.free.fr/tracks/part4
Messages postés
268
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
11
oki c'est plus compréhensible comme ça, je vais regarder, je te tiens au courant
Messages postés
268
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
11
Salut, je pense avoir trouvé, essaie ceci :

public

void SaveTreeView(
TreeView treeView,
string fileName)
{

     XmlTextWriter textWriter =
new
XmlTextWriter(fileName,
Encoding.ASCII);
    
// Amorce du fichier
     textWriter.WriteStartDocument();

     // Pour les sauts de ligne

      textWriter.Formatting =
Formatting.Indented;

      // Racine
     
textWriter.WriteStartElement(
"TreeView");

     
// Méthode récursive pour sauvegarder les noeuds
       SaveNodes(treeView.Nodes, textWriter);
       
      // Fin de la racine
      textWriter.WriteEndElement();

      // Fin d'amorce
      textWriter.WriteEndDocument();

      // Ferme le fichier
      textWriter.Close();
}

et la méthode SaveNodes

private

void SaveNodes(
TreeNodeCollection nodesCollection,
XmlTextWriter textWriter)
{
    
for(
int i = 0; i < nodesCollection.Count; i++)
    {
         
TreeNode node = nodesCollection[i];

           textWriter.WriteStartElement("Noeud");

           textWriter.WriteAttributeString("Text", node.Text);

           // Si tu utilises des images pour les noeuds
           textWriter.WriteAttributeString("Image", node.ImageIndex.ToString());

          
if(node.Tag !=
null)
                     textWriter.WriteAttributeString("Tag", node.Tag.ToString());

          // add other node properties to serialize here
         if (node.Nodes.Count > 0)
         {
                  SaveNodes(node.Nodes, textWriter);
          } 

          textWriter.WriteEndElement();
      }
}

En espérant que ça t'ai aidé
Messages postés
63
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
27 janvier 2009

Merci ! J'ai testé vite fait... le document Xml est valide.Cependant je n'ai pas creusé car j'ai trouvé la solution grâce à la puissance du papier et du crayon !

Je posterai la solution ce soir, à savoir :
1 - Creation d'un TreeNode à partir de n'importe quel document XML et
2-  restitution de celui-ci à l'identique à partir du TreeNode.

Merci encore de t'être creusé pour moi ! Nous pourrons comparer nos solutions.

Aprés l'effort, le reconfort... http://ip2x.free.fr/tracks/part4
Messages postés
268
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
11
oki