Accueil > > > XML VERS TREENODE / TREENODE VERS XML
XML VERS TREENODE / TREENODE VERS XML
Information sur la source
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
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
TreeView et XML [ par breizhgatch ]
HEllo. J'ai un TreeView qui affiche un doc XML mais en plus simplifié. Je cherche un moyen d'associer chaque TreeNode au noeud XML auquel il correspo
drag drop treeview [ par T103 ]
BonjourJe veux faire un drag and drop entre 2 treeview qui sont sur 2 projet differents, lorsque je regarde mon code en debuugage jai ce message la su
Generer Xml à partir d'un TreeNodeCollection (TreeView) [ par ip2x ]
Bonjour,j'ai beaucoup de mal a générer un document XML representatif d'un Treeview.Quelqu'un aurait-il une solution ?Aprés l'effort, le reconfort... h
Probleme TreeView [ par Tracid83 ]
Bonjour,voila j'ai un petit problème avec la gestion de ma Treeview. J'ai rajoutés des images devant les différents ligne de ma Treeview mais lorsque
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 ]
je représenter un document xml dans TreeView mais j'ai des problems pour afficher les attributs des élément j'utilis
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
|
Derniers Blogs
MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril SHAREPOINT 15 TECHNICAL PREVIEW MANAGED OBJECT MODEL SOFTWARE DEVELOPMENT KITSHAREPOINT 15 TECHNICAL PREVIEW MANAGED OBJECT MODEL SOFTWARE DEVELOPMENT KIT par Matthew
http://www.microsoft.com/download/en/details.aspx?id=28768&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+MicrosoftDownloadCenter+(Microsoft+Download+Center) ...
Cliquez pour lire la suite de l'article par Matthew
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|