Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CHARGEMENT D'UN FICHIER XML DANS UN TREEVIEW


Information sur le tutorial

Catégorie :.NET Tutorial .NET ( DotNet ) Date de création : 13/01/2007 21:14:42 Vu : 5 943 fois

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

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.

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 :
...
Aucun commentaire pour le moment.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,06 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.