begin process at 2010 02 09 15:28:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > XML VERS TREENODE / TREENODE VERS XML

XML VERS TREENODE / TREENODE VERS XML


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Source .NET ( DotNet ) Classé sous :xml, treeview, treenode, générer Niveau :Débutant Date de création :04/04/2007 Vu :9 426

Auteur : ip2x

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

 Description

Voici une source basée sur un tutoriel de ce site. Elle repond à bon nombre de sujets postés ici.

A savoir :
1- Génération d'un TreeNode à partir d'un document XML.
2- Génération d'un document Xml à partir du même TreeNode.

Elle trouve sa principale application dans l'edition d'un document XML à partir du TreeNode généré par cette même source...Utile pour modifier un document...

Elle est abondamment commentée.

Source

  • #region Generating TreeNode from the Xml document
  • /// <summary>
  • /// Generates a TreeNode that represents the structure of an XML based document.
  • /// </summary>
  • /// <param name="cheminFichierAAnalyser">The path of the file you want to get the TreeNode.</param>
  • private void getTreeNode()
  • {
  • //creation du TreeNode
  • this._mTreeNode = this.generateTreeNode(this._mRootNode);
  • }
  • private TreeNode generateTreeNode(XmlNode noeud)
  • {
  • //Creation d'un nouveau TreeNode du nom de la balise XML
  • TreeNode tn = new TreeNode(noeud.Name);
  • //Si il y a des attributs
  • if (noeud.Attributes != null && noeud.Attributes.Count > 0)
  • {
  • //Creation d'un sous-arbre qui recevra les attributs
  • TreeNode arbreAttributs = new TreeNode("Attributes");
  • //Ajout de chaque attribut du noeud au sous-arbre (Nom=Valeur)
  • foreach (XmlAttribute attr in noeud.Attributes)
  • arbreAttributs.Nodes.Add(attr.Name + "=\"" + attr.Value + "\"");
  • //Ajout du sous-arbre à l'arbre du noeud
  • tn.Nodes.Add(arbreAttributs);
  • }
  • // le sous-element XML n'est pas une balise mais une valeur textuelle
  • if (noeud.Value != null && noeud.Value != "")
  • //l'arbre portera le nom du noeud
  • tn.Text = "Value:"+noeud.Value;
  • //Le sous-element est une balise
  • else
  • {
  • // parcours des sous-elements XML
  • foreach (XmlNode subxn in noeud.ChildNodes)
  • // on ajoute le sous-element ainsi que ses propres
  • // sous-element recursivement
  • tn.Nodes.Add(this.generateTreeNode(subxn));
  • }
  • //Une fois tous les noeuds traités, retour du TreeNode
  • return (tn);
  • }
  • #endregion
  • #region Saving/writing the NewsML document
  • private void LaunchWriting(string filename)
  • {
  • //defintion du writer qui va ecrire le document xml.
  • XmlTextWriter w = new XmlTextWriter(filename, System.Text.Encoding.UTF8);
  • //defintion de l'indentation
  • w.Formatting = Formatting.Indented;
  • w.Indentation +=2 ;
  • //ecriture de la declaration xml
  • w.WriteStartDocument();
  • //parcours des treenodes du treeview newsML
  • foreach (TreeNode tn in this.treeViewNewsML.Nodes)
  • {
  • this.writeNewsML(w, tn, filename);
  • }
  • //fermeture du writer
  • w.Close();
  • }
  • private void writeNewsML(XmlWriter w, TreeNode tn, string filename)
  • {
  • //Presence de fils => Soit un noeud pere, soit un noeud d'attributs
  • //et differenciation entre les noeuds peres <pere></pere>
  • //et les noeuds de valeurs <pere>valeur</pere> materialisés par la chaine "Value:"
  • //precedent la dite valeur.
  • if (tn.Nodes != null && !tn.Text.StartsWith("Value:"))
  • {
  • //Ecriture du pere avant ses attributs
  • //Si ce n'est pas un arbre d'attributs, c'est un arbre pere.
  • if (tn.Text != "Attributes")
  • {
  • //Ecriture d'une balise ouvrante
  • w.WriteStartElement(tn.Text);
  • //ecriture de ses attributs. (en les faisant repasser
  • //dans la moulinette, ils tomberont dans le "else" suivant)
  • foreach (TreeNode n in tn.Nodes)
  • {
  • this.writeNewsML(w,n,filename);
  • }
  • //Ecriture de la balise fermante
  • w.WriteEndElement();
  • }
  • //Si ce n'est pas un pere, c'est un noeud d'attributs,
  • //que l'on attribue au pere
  • else
  • {
  • //Ecriture des attributs de l'arbre pere :
  • //Pour chaque attribut
  • foreach (TreeNode att in tn.Nodes)
  • {
  • //Recuperation du nom de l'attribut par decoupage de la chaine selon le "=" //(il est avant le "=")
  • string attName = att.Text.Split(System.Convert.ToChar("="))[0];
  • //Recuperation dde la valuer de l'attribut selon le meme procédé.
  • string attValue = att.Text.Split(System.Convert.ToChar("="))[1];
  • //On vire les caracteres quotes (") presents de chaque coté
  • //de la valeur de l'attribut.
  • //Le fait de decouper une chaine selon un caractere vire celui-ci.
  • attValue = attValue.Split(System.Convert.ToChar("\""))[1];
  • //ecriture de l'attribut.
  • w.WriteAttributeString(attName, attValue );
  • }
  • }
  • }
  • //Il n'y a pas de fils => les attributs ayant été traités,
  • //ils ne doivent pas passer.
  • //Ne doivent passer que les valeurs relatives au precedent arbre
  • else if (tn.Parent.Text != "Attributes" && tn.Text != "Attributes")
  • {
  • w.WriteString(tn.Text.Remove(0,6));
  • }
  • }
  • #endregion
        #region Generating TreeNode from the Xml document
        /// <summary>
        /// Generates a TreeNode that represents the structure of an XML based document.
        /// </summary>
        /// <param name="cheminFichierAAnalyser">The path of the file you want to get the TreeNode.</param>
        private void getTreeNode()
        {
	        //creation du TreeNode
	        this._mTreeNode = this.generateTreeNode(this._mRootNode);
        }

	private TreeNode generateTreeNode(XmlNode noeud)
	{
		//Creation d'un nouveau TreeNode du nom de la balise XML
		TreeNode tn = new TreeNode(noeud.Name);

		//Si il y a des attributs
		if (noeud.Attributes != null && noeud.Attributes.Count > 0)
		{
			//Creation d'un sous-arbre qui recevra les attributs
			TreeNode arbreAttributs = new TreeNode("Attributes");
                
			//Ajout de chaque attribut du noeud au sous-arbre (Nom=Valeur)
			foreach (XmlAttribute attr in noeud.Attributes)
				arbreAttributs.Nodes.Add(attr.Name + "=\"" + attr.Value + "\"");

			//Ajout du sous-arbre à l'arbre du noeud
			tn.Nodes.Add(arbreAttributs);
		}

		// le sous-element XML n'est pas une balise mais une valeur textuelle
		if (noeud.Value != null && noeud.Value != "")
			//l'arbre portera le nom du noeud
			tn.Text = "Value:"+noeud.Value;
			//Le sous-element est une balise
		else
		{
			// parcours des sous-elements XML
			foreach (XmlNode subxn in noeud.ChildNodes)                
                   
				// on ajoute le sous-element ainsi que ses propres
				// sous-element recursivement
				tn.Nodes.Add(this.generateTreeNode(subxn));
		}
		//Une fois tous les noeuds traités, retour du TreeNode
		return (tn);
	}
        #endregion



        #region Saving/writing the NewsML document
	private void LaunchWriting(string filename)
	{
		//defintion du writer qui va ecrire le document xml.
		XmlTextWriter w = new XmlTextWriter(filename, System.Text.Encoding.UTF8);
			
		//defintion de l'indentation
		w.Formatting = Formatting.Indented;
		w.Indentation +=2 ;

		//ecriture de la declaration xml
		w.WriteStartDocument();

		//parcours des treenodes du treeview newsML
		foreach (TreeNode tn in this.treeViewNewsML.Nodes)
		{
			this.writeNewsML(w, tn, filename);
		}

		 //fermeture du writer
		 w.Close();
	}

	private void writeNewsML(XmlWriter w, TreeNode tn, string filename)
	{
		//Presence de fils => Soit un noeud pere, soit un noeud d'attributs
		//et differenciation entre les noeuds peres <pere></pere>
		//et les noeuds de valeurs <pere>valeur</pere> materialisés par la chaine "Value:"
		//precedent la dite valeur.
		if (tn.Nodes != null && !tn.Text.StartsWith("Value:"))
		{
			//Ecriture du pere avant ses attributs
			//Si ce n'est pas un arbre d'attributs, c'est un arbre pere.
			if (tn.Text != "Attributes")
			{
				//Ecriture d'une balise ouvrante
				w.WriteStartElement(tn.Text);
					//ecriture de ses attributs. (en les faisant repasser 
				//dans la moulinette, ils tomberont dans le "else" suivant)
				foreach (TreeNode n in tn.Nodes)
				{
					this.writeNewsML(w,n,filename);
				}
				
				//Ecriture de la balise fermante
				w.WriteEndElement();
			}
			
				//Si ce n'est pas un pere, c'est un noeud d'attributs, 
			//que l'on attribue au pere
			else 
			{
				//Ecriture des attributs de l'arbre pere :
				//Pour chaque attribut
				foreach (TreeNode att in tn.Nodes)
				{
					//Recuperation du nom de l'attribut par decoupage de la chaine selon le "="						//(il est avant le "=")
					string attName = att.Text.Split(System.Convert.ToChar("="))[0];
						//Recuperation dde la valuer de l'attribut selon le meme procédé.
					string attValue = att.Text.Split(System.Convert.ToChar("="))[1];
						
					//On vire les caracteres quotes (") presents de chaque coté
					//de la valeur de l'attribut.
					//Le fait de decouper une chaine selon un caractere vire celui-ci.
					attValue = attValue.Split(System.Convert.ToChar("\""))[1];

					//ecriture de l'attribut.
					w.WriteAttributeString(attName, attValue );
				}
			}
		}

		//Il n'y a pas de fils => les attributs ayant été traités, 
		//ils ne doivent pas passer.
			//Ne doivent passer que les valeurs relatives au precedent arbre
		else if (tn.Parent.Text != "Attributes" && tn.Text != "Attributes")
		{
			w.WriteString(tn.Text.Remove(0,6));
		}
	}
	#endregion

 Conclusion

Voila pour ce qui est du code...


 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 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
Source avec Zip Source .NET (Dotnet) C# ET LE FRAMEWORK MAIS C'EST TRÈS SIMPLE... ETAPE 2 PHASE 2 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) [.NET3.5] SYSTEM.IO.PIPES - UTILISATION D'UN CANAL NOMMÉ par Willi
Source avec Zip Source avec une capture Source .NET (Dotnet) XML LOADER par damned3
Source avec Zip Source .NET (Dotnet) TREEXML par sebseb42
Source .NET (Dotnet) [C#] TREEVIEW - SÉLECTIONNER UN TREENODE & SES FILS par scoubidou944

Commentaires et avis

Commentaire de ip2x le 04/04/2007 18:45:02

Ah alors oui...

this._mTreeNode = new TreeNode();
this._mRootNode = this._mDocumentXml.DocumentElement;

Voila...

Commentaire de Bidou le 04/04/2007 18:59:00 administrateur CS

Pourquoi ne pas mettre un lien sur le tuto en question?

Commentaire de ip2x le 04/04/2007 20:12:54

Effectivement...C'est de ce tutoriel dont la fonction de génération du treenode est tirée :

http://www.csharpfr.com/codes/TREEXML_30683.aspx

Seul changement, j'ai rajouté la chaine "Value:" pour faire la distinction entre un noeud et sa valeur.

Voila c'est tout je crois...ah non encore une chose : cette source est réalisée avec le framework 1.1.

Sur ce, bonne soirée.

Commentaire de emmanuel1980 le 02/05/2007 17:52:52

bonjour,

Je fais actuellement un editeur de fichiers XML, j'utilise donc la lecture et l'écriture.. ton script est clair et permet en effet d'éditer un flux..
Par contre, dans le cas ou une balise est vide du genre <balise1/> l'affichage dans le treeview interprête mal cette donnée et affiche le "<" dans le treeview au lieu d'afficher balise1 comme un noeud.
Je te dis cela car j'ai le même problème..
Aurais tu trouvé une solution de ton coté ?

bonne soirée,

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

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 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 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 je veux représenter un xml dans un TreeView [ par moha_yougo ] &nbsp;&nbsp;&nbsp; je repr&#233;senter un document xml dans TreeView mais j'ai des problems pour afficher les attributs des &#233;l&#233;ment j'utilis TreeView : comment associer une image a un TreeNode [ par moha_yougo ] &nbsp;&nbsp;&nbsp; j'utilise une classe pour afficher un xml dans treeViewer je veut associer pour chaque type de noeud une image comment faire &#231; 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@# Suppression de données XML depuis un treeview [ par arouze ] Bonjour à tous, J'ai créé une petite application en C# qui m'affiche dans un Treeview mes données enregistrées dans un fichier XML. J'aimerais ajouter chargement d'une treeview a partir d'un fichier XML [ par M_karim8 ] bonjour je cherche a charger une tree view a partir d'un fichier XML. quelqu'un saurait il comment faire ???merci d'avance... Générer un xml [ par lenoil55 ] Bonjour à tous,je souhaite réaliser un fichier xml (avec un format par défaut) à partir d'une base de données et afficher le résultat dans une page we


Nos sponsors


Appels d'offres

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,764 sec (4)

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