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

cs_ip2x 64 Messages postés mercredi 9 février 2005Date d'inscription 27 janvier 2009 Dernière intervention - 3 avril 2007 à 18:21 - Dernière réponse : cs_ip2x 64 Messages postés mercredi 9 février 2005Date d'inscription 27 janvier 2009 Dernière intervention
- 4 avril 2007 à 18:39
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
Afficher la suite 

7 réponses

Répondre au sujet
cs_ip2x 64 Messages postés mercredi 9 février 2005Date d'inscription 27 janvier 2009 Dernière intervention - 4 avril 2007 à 18:39
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_ip2x
MasterShadows 269 Messages postés lundi 1 mars 2004Date d'inscription 19 avril 2012 Dernière intervention - 3 avril 2007 à 19:06
0
Utile
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;
}
Commenter la réponse de MasterShadows
cs_ip2x 64 Messages postés mercredi 9 février 2005Date d'inscription 27 janvier 2009 Dernière intervention - 3 avril 2007 à 22:58
0
Utile
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
Commenter la réponse de cs_ip2x
MasterShadows 269 Messages postés lundi 1 mars 2004Date d'inscription 19 avril 2012 Dernière intervention - 4 avril 2007 à 09:38
0
Utile
oki c'est plus compréhensible comme ça, je vais regarder, je te tiens au courant
Commenter la réponse de MasterShadows
MasterShadows 269 Messages postés lundi 1 mars 2004Date d'inscription 19 avril 2012 Dernière intervention - 4 avril 2007 à 10:49
0
Utile
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é
Commenter la réponse de MasterShadows
cs_ip2x 64 Messages postés mercredi 9 février 2005Date d'inscription 27 janvier 2009 Dernière intervention - 4 avril 2007 à 12:30
0
Utile
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
Commenter la réponse de cs_ip2x
MasterShadows 269 Messages postés lundi 1 mars 2004Date d'inscription 19 avril 2012 Dernière intervention - 4 avril 2007 à 13:02
0
Utile
oki
Commenter la réponse de MasterShadows

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.