begin process at 2010 02 10 12:28:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > TREEXML

TREEXML


 Information sur la source

Note :
8,33 / 10 - par 3 personnes
8,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Source .NET ( DotNet ) Classé sous :treeview, xml, parser, xmlnode, treenode Niveau :Débutant Date de création :11/04/2005 Date de mise à jour :12/04/2005 18:17:58 Vu / téléchargé :15 947 / 1 154

Auteur : sebseb42

Ecrire un message privé
Site perso
Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note

 Description

Fichier XML -> TreeView (Parser XML)

Source

  • // je suggere de commencer a lire la deuxieme fonction, GetTreeNodeFromXML
  • public class TreeXML
  • {
  • private static TreeNode DoElement(XmlNode xn)
  • {
  • TreeNode tn = new TreeNode(xn.Name);
  • // créé l'objet TreeNode de base qui va recevoir les données XML
  • // il portera le nom de la balise XML
  • // il y a des attributs
  • if (xn.Attributes != null && xn.Attributes.Count > 0)
  • {
  • TreeNode attr_node = tn.Nodes.Add("Attibutes");
  • // on creer un sous arbre
  • // qui contiendra les attributs
  • foreach (XmlAttribute attr in xn.Attributes) // parcours des attributs
  • attr_node.Nodes.Add(attr.Name + "=" + attr.Value);
  • // ajout des attributs,
  • // nom de l'attribut puis sa valeur
  • }
  • // le sous-element XML n'est pas une balise mais une valeur textuelle
  • if (xn.Value != null && xn.Value != "")
  • tn.Text = xn.Value;
  • else
  • {
  • // parcours des sous-elements XML
  • foreach (XmlNode subxn in xn.ChildNodes)
  • tn.Nodes.Add(DoElement(subxn));
  • // on ajoute le sous-element ainsi que ses propres
  • // sous-element recursivement
  • }
  • return (tn);
  • // une fois la recursion terminée, on renvoie le TreeNode, qui contient ses sous TreeNode
  • }
  • public static TreeNode GetTreeNodeFromXML(string xml_file)
  • {
  • XmlDocument doc = new XmlDocument();
  • doc.Load(xml_file);
  • // charge un fichier xml, cette fonction se charge toute seule de gerer le fichier
  • // pas besoin de Close ou autre
  • XmlNode root = doc.DocumentElement;
  • // root devient le premier element XML
  • // (il n'y en a jamais plus d'un en XML, il est toujours unique)
  • return (DoElement(root));
  • // appel a DoElement
  • }
  • }
// je suggere de commencer a lire la deuxieme fonction, GetTreeNodeFromXML

public class TreeXML
{
	private static TreeNode DoElement(XmlNode xn)
	{
		TreeNode tn = new TreeNode(xn.Name);
		// créé l'objet TreeNode de base qui va recevoir les données XML
		// il portera le nom de la balise XML

		// il y a des attributs
		if (xn.Attributes != null && xn.Attributes.Count > 0)
		{
			TreeNode attr_node = tn.Nodes.Add("Attibutes");
			// on creer un sous arbre
			// qui contiendra les attributs
			
			foreach (XmlAttribute attr in xn.Attributes)    // parcours des attributs
				attr_node.Nodes.Add(attr.Name + "=" + attr.Value);
				// ajout des attributs,
				// nom de l'attribut puis sa valeur
		}


		// le sous-element XML n'est pas une balise mais une valeur textuelle
		if (xn.Value != null && xn.Value != "")
			tn.Text = xn.Value;
		else
		{
			// parcours des sous-elements XML
			foreach (XmlNode subxn in xn.ChildNodes)
				tn.Nodes.Add(DoElement(subxn));
				// on ajoute le sous-element ainsi que ses propres
				// sous-element recursivement
		}
		return (tn);
		// une fois la recursion terminée, on renvoie le TreeNode, qui contient ses sous TreeNode
	}

	public static TreeNode GetTreeNodeFromXML(string xml_file)
	{
		XmlDocument doc = new XmlDocument();
		doc.Load(xml_file);
		// charge un fichier xml, cette fonction se charge toute seule de gerer le fichier
		// pas besoin de Close ou autre

		XmlNode root = doc.DocumentElement;
		// root devient le premier element XML
		// (il n'y en a jamais plus d'un en XML, il est toujours unique)

		return (DoElement(root));
		// appel a DoElement
	}
}

 Conclusion

Il n'y a pas de commentaires car bien souvent les commentaires decalent les lignes, on ne sait plus lesquels vont ou, ca complique les chose. Les classes utilisés ici sont vraiment simple et tres bien concu, par consequent je pense que le code parle de lui meme.

En cas de question eventuelles, n'hesitez pas ;)

Message a l'attention des Admins/Modo : Je sais que ce code est d'une banalité a mourrir, mais cependant des gents disent encore avoir du mal avec l'XML en .NET et disent ne pas toujours trouver toutes les infos qu'ils cherchent, j'espere que ce code et les questions/réponses qui suivront pourront leur apporter des lumiere :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

12 avril 2005 18:12:25 :
- Refonte des indentations - Ajouts de commentaires dans le code - Suppression d'une ligne qui etait strictement inutile (TreeNode tn = new TreeNode(), vers la fin du code, deuxieme fonction)
12 avril 2005 18:13:27 :
(nothing)
12 avril 2005 18:17:58 :
Mise en forme du texte

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) WORLDCUP RSS
Source avec Zip Source avec une capture Source .NET (Dotnet) SECURECOMM (RSA)
Source avec Zip Source .NET (Dotnet) USB DETECTOR
Source avec Zip Source .NET (Dotnet) "DIFF" SUR DES ARBORESCENCES DE FICHIERS DONNÉS
Source avec Zip Source avec une capture Source .NET (Dotnet) ROPE SIMULATOR

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) ENT LIB - VALIDATION BLOC DEMO par bernie666
Source avec Zip Source .NET (Dotnet) CRÉER UN ADDIN AUTOMATION POUR EXCEL par ShareVB
Source .NET (Dotnet) XML VERS TREENODE / TREENODE VERS XML par ip2x
Source avec Zip Source avec une capture Source .NET (Dotnet) NAVIGATION DANS UNE TABCONTROL par floptwo
Source avec Zip Source .NET (Dotnet) C# ET LE FRAMEWORK MAIS C'EST TRÈS SIMPLE ! ETAPE 2 PHASE 3 par bestmomo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) RECHERCHE ET GESTION DE FICHIERS PERSONNALISÉES par JeremyLecouvert
Source avec Zip Source avec une capture Source .NET (Dotnet) XML LOADER par damned3
Source .NET (Dotnet) XML VERS TREENODE / TREENODE VERS XML par ip2x
Source avec Zip Source avec une capture Source .NET (Dotnet) UNE CLASSE DE COLORATION SYNTAXIQUE MULTILANGAGE par sebmafate
Source .NET (Dotnet) [C#] TREEVIEW - SÉLECTIONNER UN TREENODE & SES FILS par scoubidou944

Commentaires et avis

Commentaire de Alain Proviste le 11/04/2005 21:28:18 administrateur CS

oui mais peut etre pas tutoriaux non plus ?

Commentaire de sebseb42 le 11/04/2005 21:36:43

Bah je dois admettre que je ne savais pas trop quoi mettre d'autre, et puis c'est plutot que le de code qui aide les debutant a comprendre, et les experimenter a voir la chose d'une approche differente si la leur n'est pas ainsi.

C'est vrai que ce n'est pas vraiment tu tut, mais ce code en soi n'as strictement aucune utilité "pratique".

Commentaire de Bidou le 12/04/2005 08:38:57 administrateur CS

Les commentaires ne sont pratiquement jamais superflu, pour ne pas dire jamais (surtout si tu fais ce code pour les débutants...)
Je suis certain que quelques mots d'explications pour les novices ne seraient pas de trop.

Commentaire de Alain Proviste le 12/04/2005 12:17:19 administrateur CS

j'en conviens mais même si le code peut te paraitre transparent (c'est toi qui l'a écrit ok) commente le un peu pour ceux qui viendront le consulter dans tutoriaux et qui ne comprendront pas :)
non ?

Commentaire de Warny le 12/04/2005 14:13:26

Les commentaires c'est vital, même sur un code court.
Tu n'as sans doute pas encore vécu cette situation qui se résume à :
Si tu peux pas lire ton code, réécris le !!!
Tu ne comprend pas à quoi sert ton code, élimine-le. Si ça marche pas, réécris tout.
Et là tu maudit le jour où tu as décidé que les commentaires étaient inutiles

Commentaire de sebseb42 le 12/04/2005 17:59:42

je vous repond :)

Bidou : "Les commentaires ne sont pratiquement jamais superflu, pour ne pas dire jamais (surtout si tu fais ce code pour les débutants...)"

Personellement je trouve que les commentaires obscurcissent le code, je veux bien ecrire des explications detaillés "apres" le code, mais pas dedans. Ceux qui ont deja lu des codes GNU comprendrons ce que je veux dire.

"Je suis certain que quelques mots d'explications pour les novices ne seraient pas de trop"

Oui, ca on est d'accord, et c'est justement ce pourquoi le forum existe, si des gents veulent des explications, qu'ils n'hesite surtout pas a poser des questions, nous sommes en train de demontrer que le forum est bel et bien actif ;)

Alain Proviste : "commente le un peu pour ceux qui viendront le consulter dans tutoriaux et qui ne comprendront pas :)
non ?"

Je ne suis pas vraiment contre cette idée si vous insistez, mais je n'ai pas trouver le boutton "Edit" :S
Si quelqu'un sait comment je peux editer mon post sans ennuyer Nix, je suis preneur

Warmy : "Tu n'as sans doute pas encore vécu cette situation qui se résume à :
Si tu peux pas lire ton code, réécris le !!!
Tu ne comprend pas à quoi sert ton code, élimine-le. Si ça marche pas, réécris tout."

Non en effet je n'ai jamais vecu ca, generallement je structure mon code le mieux possible, je le fragmente et range les fonctionnalités dans des fichiers leur caracterisant cette fonctionnalité, et j'ai une tres bonne memoire, je retrouve toujours mon code comme il faut et tres peu de relecture me suffit a replonger dans un projet mis de coté, meme si c'est depuis plus d'un an :)

Mais je concoit que ceux qui lise mon tuto peuvent pas se mettre dans ma tete.

Ceci juste pour dire que celui qui n'arrive pas a relire son code, c'est quand meme quelqu'un qui baisse les bras vraiment trop vite, ou alors quelqu'un qui code vraiment comme un porc, et dans n'importe quel cas, cette personne n'as aucune excuse.

Bref, je crois avoir outre-passé largement le sujet, desoler pour mon egarement.

Commentaire de sebseb42 le 12/04/2005 18:19:24

Voila, j'ai trouver le boutton Edit, et j'ai commenté :)
Je trouve pas ca plus lisible, mais au moins mnt pu personne n'as d'excuses :P

Commentaire de Bidou le 12/04/2005 21:20:21 administrateur CS

C'est vrai que ça ne donne pas super ici, mais si le code est copié dans VS par exemple, ça ne pose aucun problème !

Commentaire de Warny le 14/04/2005 08:47:56

C'est infiniment plus clair.

Pour tes lignes
// le sous-element XML n'est pas une balise mais une valeur textuelle
        if (xn.Value != null && xn.Value != "")
            tn.Text = xn.Value;

Je pense que tu peux tester le type d'objet avec une ligne comme (c'est à corriger, mais tu comprendras l'esprit), puis traiter en utilisant éventuellement un cast pour obtenir un typage plus fort.

//Recherche le type du noeud
switch (xn.GetType().ToString())
{
    case "XmlText": //si c'est du texte
        ....
        break;
    case "XmlCDataSection": //si c'est une section CDATA
        ...
        break;
    default: //Sinon, on recherche les noeud enfants
        ...
        break;
}

Commentaire de sebseb42 le 14/04/2005 10:55:16

ah ouais :), mais j'ai pas fait ca car il y a vraiment beaucoup trop de type, et sinon j'aurais plutot fait un truc mieux, du style

switch (xn.NodeType)
{
    case XmlNodeType.Texte:
        ...
    case XmlNodeType.CDATA:
        ...
    // etc...
}

Commentaire de Alain Proviste le 14/04/2005 20:26:31 administrateur CS

merci d'avoir commenté :p
maintenant c'est très à sa place dans tutoriaux ;)

Commentaire de moha_yougo le 15/03/2006 12:38:55

hello,every body
j'utilise cette classe treeXML dans TP je ne veut pas avoir les commentaire dans le treeView
comment faire ça sans changer grand choose
j'ai utiliser xn.nextsibling mais rien a faire les commentaire sont toujours la.
comment faire????????!!!

Commentaire de moha_yougo le 15/03/2006 13:08:57

c bon c régler j'ai fait ça
// parcours des sous-elements XML

                    foreach (XmlNode subxn in xn.ChildNodes)
                    {
                         if(subxn.NodeType != XmlNodeType.Comment)
                         {
                            tn.Nodes.Add(DoElement(subxn));
                         }
                    }
bonne chance

Commentaire de nadir80 le 10/05/2006 22:03:26

bonjour j'ai un pepin !!!!!!!!
le code je le trouve tip top!!! de la balle!!!! c'est ce que je cherché!! MAIS je cherche un retour pour une application trés sérieuse :-( donc : TreeView -> Fichier XML s'il y a moyen de m'aidé!!

ps : je suis débutant....euh je crois que ca veux dire plein de chose :-s

merci d'avance

Commentaire de nadir80 le 10/05/2006 22:07:39

moi je met 9/10 car apparement je peux pas changer le vote :-( dsl pour cette boulette...

Commentaire de BruNews le 10/05/2006 22:51:12 administrateur CS

Voila ta note est enlevée, tu devrais pouvoir renoter.

Commentaire de Jackmalone le 19/08/2006 17:53:41

Bonjour,

tout d'abord, merci pour ton code qui est bien utile.
Je suis débutant et j'arrive pas à remplir un treeView placé sur un formulaire avec les données du xml. Mon treeView s'appel "treeView1".

J'ai essayé ceci mais sans succès:
treeView1.Nodes = TreeXML.GetTreeNodeFromXML("Mon URL");

Et j'ai comme erreurs:
Error 1: Property or indexer 'System.Windows.Forms.TreeView.Nodes' cannot be assigned to -- it is read only
Error 2 Cannot implicitly convert type 'System.Windows.Forms.TreeNode' to 'System.Windows.Forms.TreeNodeCollection'

Quelqu'un peut il m'aider?
Merci!!

Commentaire de Alain Proviste le 19/08/2006 19:03:46 administrateur CS

essaie treeView1.Nodes.Add(TreeXML.GetTreeNodeFromXML("Mon URL"));

Commentaire de Jackmalone le 20/08/2006 03:50:06

Merci! ça marche! En fait j'avais trouvé peu de temps apres mais ça pourra toujours servir à quelqun...

Commentaire de ip2x le 03/04/2007 18:58:41

Hello et une fonction qui fait l'inverse, à savoir générer un document XML representatif de ce treenode, vous aurriez pas ça sous l'coude ?

J'ai enormement de mal a regénérer mon xml de la mm maniere...

Commentaire de ip2x le 04/04/2007 12:36:12

Donc j'ai fait la fonction qui, basée sur l'exemple ci-dessus,   génére le document Xml.

C'est là : http://www.csharpfr.com/infomsg_GENERER-XML-PARTIR-TREENODECOLLECTION-TREEVIEW_914653.aspx#5

Commentaire de cavocavu le 19/04/2007 10:09:21

Salut,
Bon déjà merci pour ce code il marche nikel et c'est tout à fait ce qu'il me fallait... Ou presque.
En fait j'essaie de l'adapter à mon cas particulier en changeant quelques petites choses mais je débute en C# et je dois dire que je galère pas mal.
Par exemple j'aimerais que les attributs ne soient pas dans un fils mais dans le nom du père. J'ai essayé plusieurs trucs mais bon j'ai des erreurs à chaque fois et je pense que je ne fais pas du tout comme il faut.
Si quelqu'un pouvait m'aider ca serait super. Merci d'avance

Commentaire de ip2x le 14/05/2007 20:56:37

#  TreeNode tn = new TreeNode();
# string tnText = xn.Name;
#
# // il y a des attributs
# if (xn.Attributes != null && xn.Attributes.Count > 0)
# {
#
# foreach (XmlAttribute attr in xn.Attributes) // parcours des attributs
# tnText += attr.Name + "=" + attr.Value + " " ;
# // ajout des attributs,
# // nom de l'attribut puis sa valeur
# }
tn.Text = tnText;

Voila... pas testé mais ça devrait etre correct...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

insérer un tableau en tant que treenode d'un treeview [ par benkawet ] Voila sa fait deja plusieurs jours que je cherche une réponse ... mais toujours rien trouvé .J'utilise Visual Studio pour creer une page .aspx en util Parser XML [ par CMatt ] Bonjour à tous! Je me suis mit récement à PHP, et dans le cadre d'un projet personnel, j'ai eu besoin de parser un fichier XML personn Treeview : erreur de lecture du fichier XML en authentification intégrée [ par Drix78 ] Bonjour,après avoir tenté d'exécuter un sample tout bête du webcontrol treeview, avec un fichier XML, je me suis rendu compte qu'il m'était impossible Comment reorganiser des treenode dans un treeview? [ par Skurcey ] Je fais un petit web browser en c# avec VC# 2005 et j aimerais laisse la possibilite aux utilisateurs de reorganiser leurs favoris en faisant du drag Création d'un noeud Xml à partir de rien [ par cfz ] Bonjours, je travail sur un document Xml sur lequel j'ai besoin d'ajouter de nouveaux noeuds. Je voulais faire XmlNodeLoc.AppendChild(newNode)mais le TreeView : comment associer une image a un TreeNode [ par moha_yougo ]     j'utilise une classe pour afficher un xml dans treeViewer je veut associer pour chaque type de noeud une image comment faire ç Xml - TreeView : pb ^^ [ par Dami_bachelet ] Bonjour tout le monde, comment allez-vous dans ce monde de la programmation ^^ ? J'ai besion de votre aide concernant un petit prog qui utilise des do creation xml depuis treeview [ par DADAPOINTCOM ] bonjour tout le mondevoila ma question, comment creer un fichier XML depuis un treeview, je pense que ça à l'air simple mais je tourne en rond.Merci@# Solution [ par Solution ] Bonjour,pour ceux qui sont intéressé par la manipulation de fichier xml voici un bou de code pour l'affichage de contenu d'un balise sp&#233 je veux représenter un xml dans un TreeView [ par moha_yougo ]     je représenter un document xml dans TreeView mais j'ai des problems pour afficher les attributs des élément j'utilis


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,671 sec (3)

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