begin process at 2012 02 11 13:31:51
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

.NET

 > CHARGEMENT D'UN FICHIER XML DANS UN TREEVIEW

CHARGEMENT D'UN FICHIER XML DANS UN TREEVIEW


 Information sur le tutoriel

Déposé par zatt le 13/01/2007 21:14:42
Dans la catégorie .NETTutoriel .NET ( DotNet )
Vu : 13 826 fois
 

Ecrire un message privé à l'auteur
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

 Description

Chargement d'un fichier xml dans un treeview

Tutorial

Je cherchais une bribe de code permettant d'alimenter un treeview à partir d'un fichier xml dont le schéma est défini (ce source est en fait une base pour un agrégateur rss, me permettant de charger les flux mémorisés; je ne sais si cette solution sera satisfaisante par la suite, mais tout l'intérêt pédagogique est là).
N'ayant pu trouver de résultat satisfaisant, vous livre ici la façon dont j'ai procédé.

Tout d'abord le fichier xml (pas le plus intéressant, mais indispensable), basé sur un schéma interne au programme :


<?xml version = " 1.0 " encoding = " utf-8 " ?>
<
d onnees >
   <
dossier>
       
< nom_dossier > OpenRSS </nom_dossier >
        <
flux>
            
< nom_flux > OpenRSS </nom_flux >
            <
url > http://www.geocities.com/nolius123/openrss.xml </url >
         </flux
>
    </dossier
>
    
< dossier >
       <
nom_dossier > Actualités</ nom_dossier >
      <
flux >
            <
nom_flux > Google Actualités France - France </nom_flux >
            <
url > http://hyperlinkextractor.free.fr/rssfiles/google_france.xml </url >
      </flux
>
      <
flux >
            <
nom_flux > Google Actualités France - International </nom_flux >
            <
url > http://hyperlinkextractor.free.fr/rssfiles/google_monde.xml </url >
      </flux>
   </dossier >
   <
dossier >
      <
nom_dossier > Informatique </nom_dossier >
      <
flux 
            <
nom_flux>Actualités ZDNet.fr</nom_flux>
            <
url>http://www.zdnet.fr/feeds/rss/actualites/</url>
      </flux
>
      <
flux>
            <
nom_flux>codes-sources.com - dernieres sources</nom_flux>
            <
url>http://www.codes-sources.com/rss.aspx?type=code</url>
      </flux
>
      
<flux>
            <
nom_flux>Infos-du-Net.com</nom_flux>
            <
url>http://www.infos-du-net.com/backend.php</url>
      </flux
>
      
<flux>
            <
nom_flux>dotnetguru.org</nom_flux>
            <
url>http://www.dotnetguru.org/backend.php</url>
      </flux
>
   </dossier
>
   <
dossier
>
      <
nom_dossier>Jeux video</nom_dossier
>
      <
flux
>
            <
nom_flux>Actu PC Jeux video</nom_flux
>
            <
url>http://actupcjv.webdynamit.net/PHP-Nuke-6.9.1/html/backend.php</url
>
      </flux
>
      
<flux
>
            <
nom_flux>Gamekult.com</nom_flux
>
            <
url>http://www0.gamekult.com/cobranding/rss/news.xml</url
>
      </flux
>
   
</dossier
>
</donnees>

Il faut donc parser le flux, pour ajouter les divers éléments aux noeuds du treeview, pour celà utiliser l'espace de noms System.Xml

Déclarations:


private

TreeNode tnd_racine;
privateTreeNode tnd_dossiers;
privateXmlTextReader lecturexml;


Nettoyage du treeview, et initialisation du parser :

this.tvw_browser.Nodes.Clear();
//Parse le document interne au programme (dossier, noms flux, url)
lecturexml = newXmlTextReader("fichier_donnees.xml");


La suite du code est incluse dans un bloc try/catch, afin de capturer l'exception dans le cas ou le fichier xml ne serait pas présent, on commence les ruptures pour construire le treeview:

try
{
   
XmlDocumentdoc = newXmlDocument();
   doc.Load(lecturexml);

   XmlNodenoeud_racine = doc.DocumentElement;
   
XmlNodenoeud_dossier = doc.DocumentElement;
   
XmlNodenoeud_contenudossier = doc.DocumentElement;
   
XmlNodenoeud_flux = doc.DocumentElement;

   if(noeud_racine.Name == "donnees") //Sinon le document xml est incorrect
   {
         noeud_dossier = noeud_racine.FirstChild;
//dossiers
         
tnd_racine = newTreeNode("Flux enregistrés");

         while(noeud_dossier != null)
         {
               noeud_contenudossier = noeud_dossier.FirstChild;
//nom dossier, et flux
               
while(noeud_contenudossier != null)
               {
                     
#regiondossier
                     
if(noeud_contenudossier.Name == "nom_dossier")
                     {
                           tnd_dossiers =
newTreeNode(noeud_contenudossier.InnerText);
                      }
                  
   elseif(noeud_contenudossier.Name == "flux")
                     {
                           
#regionflux
                           noeud_flux = noeud_contenudossier.FirstChild;
//nom_flux
                           
while(noeud_flux != null)
                           {
                                 tnd_dossiers.Nodes.Add(noeud_flux.InnerText);
                                 noeud_flux = noeud_flux.NextSibling;
                            }
                        
     #endregion
                     
}
                     noeud_contenudossier = noeud_contenudossier.NextSibling;
                     
#endregion
               
}
               tnd_racine.Nodes.Add(tnd_dossiers);
               noeud_dossier = noeud_dossier.NextSibling;
         }
   }
   
//Fermeture du fichier XML
   
lecturexml.Close();

   //Chargement treeview
   
this.tvw_browser.Nodes.Add(tnd_racine);
   tvw_browser.Nodes[0].Expand();
}
catch
{
     
MessageBox.Show("Fichier d'archivage introuvable", "Gestion des flux", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}


Pour l'instant les attributs du flux sont affichés en totalité (nom et url), ne s'agissant ici que d'une base de travail.

 Historique

13 janvier 2007 21:18:16 :
quelques corrections de mise en page ...
13 janvier 2007 21:41:19 :
quelques corrections de mise en page
13 janvier 2007 22:23:14 :
qualques corrections de mise en page
13 janvier 2007 22:34:21 :
mise en page
13 janvier 2007 22:40:43 :
...
13 janvier 2007 22:44:35 :
...
13 janvier 2007 23:17:37 :
...

Commentaires

Commentaire de zouche le 29/04/2010 13:17:11

good job man !!!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales