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 !

TREEXML


Information sur la source

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é: 14 233 / 1 063

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Pour les "Membres Club", vous pouvez 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

Commentaires et avis

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

oui mais peut etre pas tutoriaux non plus ?

signaler à un administrateur
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".

signaler à un administrateur
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.

signaler à un administrateur
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 ?

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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

signaler à un administrateur
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 !

signaler à un administrateur
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;
}

signaler à un administrateur
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...
}

signaler à un administrateur
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 ;)

signaler à un administrateur
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????????!!!

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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...

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

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

signaler à un administrateur
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!!

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

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

signaler à un administrateur
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...

signaler à un administrateur
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...

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



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,374 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é.