begin process at 2008 07 06 02:42:25
1 205 441 membres
21 nouveaux aujourd'hui
14 119 membres club

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 !

GESTION FACILE DES FICHIERS XML EN VB.NET (CREATION / LECTURE / MODIFICATIONS / AJOUTS / SUPPRESSIONS)


Information sur la source

Catégorie :Fichier / Disque Source .NET ( DotNet ) Niveau : Initié Date de création : 31/03/2005 Date de mise à jour : 16/09/2005 03:31:06 Vu / téléchargé: 19 446 / 1 867

Note :
8 / 10 - par 10 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Bonjour à tous ! Voici ma première contribution au monde .NET ^^ (deuxième mise à jour).
J'ai créé une petite classe qui permet de gérer les fichiers XML.

Elle fonctionne avec des chemins (comme une arborescence).
Ainsi, par exemple :
<?xml version="1.0"?>
<root>
    <test>
        <valeur>ceci est un test</valeur>
    </test>
</root>

Le chemin de l'élément valeur est "/root/test/valeur"


Ma classe permet de changer la valeur de cet élément par exemple, sans réécriture complete du fichier à chaque fois.
Un exemple complet est fourni dans le zip
J'ai développé cette classe pour pouvoir utiliser simplement des fichiers de configuration écrits en XML
Par exemple sur mon site perso mon GabPlayer 2 (http://gabsoftware.free.fr/downloads/GabPlayer2_setup.exe) utilise cette classe.

Source

  • Imports System.Xml
  • Imports System.Xml.XPath
  • ''' -----------------------------------------------------------------------------
  • ''' Project : GabXMLClass
  • ''' Class : GabXML
  • '''
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' GabXML permet une gestion facile des documents XML
  • ''' </summary>
  • ''' <remarks>
  • ''' GabXML doit être instanciée avant d'être utilisée
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Class GabXML
  • 'Le nom du fichier xml sur lequel on travaillera
  • Private fichier As String
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Constructeur de la classe
  • ''' </summary>
  • ''' <param name="leFichier"></param>
  • ''' <remarks>
  • ''' leFichier doit obligatoirement être un fichier existant
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub New(ByVal leFichier As String)
  • If System.IO.File.Exists(leFichier) Then
  • fichier = leFichier
  • End If
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Constructeur de la classe
  • ''' </summary>
  • ''' <remarks>
  • ''' Ne nécessite pas de fichier xml existant
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub New()
  • fichier = ""
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' définit/retourne le nom du fichier
  • ''' </summary>
  • ''' <value>Un fichier .xml existant</value>
  • ''' <remarks>
  • ''' Veillez à indiquer un fichier XML existant!
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Property leFichier() As String
  • Get
  • Return fichier
  • End Get
  • Set(ByVal Value As String)
  • fichier = Value
  • End Set
  • End Property
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Objectif : Renvoie la valeur de l'élément pointé par le chemin path du fichier file
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <returns>Chaine de caractères</returns>
  • ''' <remarks>
  • ''' Utilisation | exemple : getElementValue("/cd/artiste/nom")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function getElementValue(ByVal path As String) As String
  • 'declarations
  • Dim valeur As String = ""
  • Try
  • 'on charge le fchier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'récupère la valeur du premier élément
  • valeur = doc.SelectSingleNode(path).FirstChild.InnerText()
  • 'libère les ressources
  • doc = Nothing
  • Catch e As Exception
  • 'en cas d'erreur
  • MsgBox(e.Message)
  • valeur = "error"
  • End Try
  • Return valeur
  • End Function
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Objectif : Renvoie la valeur de l'élément pointé par le n-ième chemin path du fichier file
  • ''' La première position est 0
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="position"></param>
  • ''' <returns>Chaine de caractères</returns>
  • ''' <remarks>
  • ''' Utilisation | exemple : getElementValue("/cd/artiste/nom")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function getElementValue(ByVal path As String, ByVal position As Integer) As String
  • 'declarations
  • Dim valeur As String = ""
  • Try
  • 'on charge le fchier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'récupère la valeur du premier élément
  • valeur = doc.SelectNodes(path).ItemOf(position).FirstChild.InnerText()
  • 'libère les ressources
  • doc = Nothing
  • Catch e As Exception
  • 'en cas d'erreur
  • MsgBox(e.Message)
  • valeur = "error"
  • End Try
  • Return valeur
  • End Function
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Ecrit la valeur pour le premier élément pointé par le chemin path
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="valeur"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : setElementValue("/cd/artiste/nom", "Aphex Twin")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub setElementValue(ByVal path As String, ByVal valeur As String)
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'definit la racine de l'element a modifier
  • Dim parent As XmlNode = doc.SelectSingleNode(path).ParentNode
  • 'définit la node
  • Dim node As XmlNode = doc.SelectSingleNode(path)
  • 'Si le noeud a des enfants alors il faut sauver les enfants
  • If node.HasChildNodes Then
  • 'creation d'un nouvel element
  • Dim clone As XmlElement = doc.CreateElement(node.Name)
  • 'on lui assigne la nouvelle valeur
  • clone.InnerText = valeur
  • 'copie des enfants du noeud dans le nouvel element
  • Dim child As XmlNode
  • For Each child In node.ChildNodes
  • If child.GetType.ToString <> "System.Xml.XmlText" Then
  • clone.AppendChild(child.Clone())
  • End If
  • parent.ReplaceChild(clone, node)
  • node = clone
  • Next
  • Else 'sinon on change juste la valeur
  • 'creation d'un nouvel element
  • Dim elem As XmlElement = doc.CreateElement(node.Name)
  • 'on lui assigne la nouvelle valeur
  • elem.InnerText = valeur
  • 'on remplace par la nouvelle node
  • parent.ReplaceChild(elem, node)
  • End If
  • 'Sauve les modifications
  • doc.Save(fichier)
  • doc = Nothing
  • Catch e As Exception
  • MsgBox("setSettings <> Erreur dans la modification de " & fichier & " : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Ecrit la valeur pour le n-ième élément pointé par le chemin path
  • ''' Attention : Le premier noeud possède la position 0
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="valeur"></param>
  • ''' <param name="position"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : setElementValue("/cd/artiste/nom", "Aphex Twin",1)
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub setElementValue(ByVal path As String, ByVal valeur As String, ByVal position As Integer)
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'definit la racine de l'element a modifier
  • Dim parent As XmlNode = doc.SelectNodes(path).ItemOf(position).ParentNode
  • 'définit la node
  • Dim node As XmlNode = doc.SelectNodes(path).ItemOf(position)
  • 'Si le noeud a des enfants alors il faut sauver les enfants
  • If node.HasChildNodes Then
  • 'creation d'un nouvel element
  • Dim clone As XmlElement = doc.CreateElement(node.Name)
  • 'on lui assigne la nouvelle valeur
  • clone.InnerText = valeur
  • 'copie des enfants du noeud dans le nouvel element
  • Dim child As XmlNode
  • For Each child In node.ChildNodes
  • If child.GetType.ToString <> "System.Xml.XmlText" Then
  • clone.AppendChild(child.Clone())
  • End If
  • parent.ReplaceChild(clone, node)
  • node = clone
  • Next
  • Else 'sinon on change juste la valeur
  • 'creation d'un nouvel element
  • Dim elem As XmlElement = doc.CreateElement(node.Name)
  • 'on lui assigne la nouvelle valeur
  • elem.InnerText = valeur
  • 'on remplace par la nouvelle node
  • parent.ReplaceChild(elem, node)
  • End If
  • 'Sauve les modifications
  • doc.Save(fichier)
  • doc = Nothing
  • Catch e As Exception
  • MsgBox("setSettings <> Erreur dans la modification de " & fichier & " : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Ajoute un element pointé par le chemin path
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <param name="valeur"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : addElement("/cd/artiste", "nom", "Aphex Twin")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub addElement(ByVal path As String, ByVal nom As String, ByVal valeur As String)
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'selectionne le noeud parent de l'élément à ajouter
  • Dim root As XmlNode = doc.SelectSingleNode(path)
  • 'création du nouvel élément
  • Dim elem As XmlElement = doc.CreateElement(nom)
  • 'on lui assigne une valeur
  • elem.InnerText = valeur
  • 'puis on l'ajoute au noeud parent
  • root.AppendChild(elem)
  • 'on sauvegarde
  • doc.Save(fichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la création de l'élément : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Ajoute un element pointé par le n-ième chemin path
  • ''' La première position est 0
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <param name="valeur"></param>
  • ''' <param name="position"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : addElement("/cd/artiste", "nom", "Aphex Twin", 2)
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub addElement(ByVal path As String, ByVal nom As String, ByVal valeur As String, ByVal position As Integer)
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'selectionne le noeud parent de l'élément à ajouter
  • Dim root As XmlNode = doc.SelectNodes(path).ItemOf(position)
  • 'création du nouvel élément
  • Dim elem As XmlElement = doc.CreateElement(nom)
  • 'on lui assigne une valeur
  • elem.InnerText = valeur
  • 'puis on l'ajoute au noeud parent
  • root.AppendChild(elem)
  • 'on sauvegarde
  • doc.Save(fichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la création de l'élément : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' supprime le premier element pointé par le chemin path
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : deleteElement("/cd/artiste/nom", "Aphex Twin")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub deleteElement(ByVal path As String, ByVal nom As String)
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'selectionne le noeud parent de l'élément à supprimer
  • Dim root As XmlNode = doc.SelectSingleNode(path)
  • 'selectionne l'élément à supprimer
  • Dim elem As XmlElement = doc.SelectSingleNode(path & "/" & nom)
  • 'supprime l'élément
  • root.RemoveChild(elem)
  • 'sauvegarde
  • doc.Save(fichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la suppression de l'élément : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' supprime le n-ième element pointé par le chemin path
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <param name="position"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : deleteElement("/cd/artiste/nom", "Aphex Twin", 2)
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub deleteElement(ByVal path As String, ByVal nom As String, ByVal position As Integer)
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'selectionne le noeud parent de l'élément à supprimer
  • Dim root As XmlNode = doc.SelectSingleNode(path)
  • 'selectionne l'élément à supprimer
  • Dim elem As XmlElement = doc.SelectNodes(path & "/" & nom).ItemOf(position)
  • 'supprime l'élément
  • root.RemoveChild(elem)
  • 'sauvegarde
  • doc.Save(fichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la suppression de l'élément : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Ajoute un attribut "nom" de valeur "valeur" à l'élément pointé par le chemin path
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <param name="valeur"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : addAttribute("/cd/piste","numero", "3")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub addAttribute(ByVal path As String, ByVal nom As String, ByVal valeur As String)
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'declaration de l'élément auquel on ajoutera un attribut et de l'attribut en question
  • Dim root As XmlNode = doc.SelectSingleNode(path)
  • Dim attrib As XmlAttribute = doc.CreateAttribute(nom)
  • 'on valorise l'attribut
  • attrib.InnerText = valeur
  • 'on ajoute l'attribut à l'élément
  • root.Attributes.Append(attrib)
  • 'et on sauvegarde
  • doc.Save(fichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la création de l'attribut : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Ajoute un attribut "nom" de valeur "valeur" à l'élément pointé par le n-ième chemin path
  • ''' La première position est 0
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <param name="valeur"></param>
  • ''' <param name="position"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : addAttribute("/cd/piste","numero", "3", 0)
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub addAttribute(ByVal path As String, ByVal nom As String, ByVal valeur As String, ByVal position As Integer)
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'declaration de l'élément auquel on ajoutera un attribut et de l'attribut en question
  • Dim root As XmlNodeList = doc.SelectNodes(path)
  • Dim attrib As XmlAttribute = doc.CreateAttribute(nom)
  • 'on valorise l'attribut
  • attrib.InnerText = valeur
  • 'on ajoute l'attribut à l'élément
  • root.ItemOf(position).Attributes.Append(attrib)
  • 'et on sauvegarde
  • doc.Save(fichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la création de l'attribut : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Affecte à l'attribut "nom" la valeur "valeur" à l'élément pointé par le premier chemin "path"
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <param name="valeur"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : setAttribute("/cd/piste","numero", "3")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub setAttribute(ByVal path As String, ByVal nom As String, ByVal valeur As String)
  • Try
  • 'on charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'déclarations
  • Dim root As XmlNode = doc.SelectSingleNode(path)
  • Dim attrib As XmlAttribute = doc.CreateAttribute(nom)
  • 'valorisation de l'attribut
  • attrib.InnerText = valeur
  • 'ajout de l'attribut à l'élément
  • root.Attributes.Append(attrib)
  • 'sauvegarde
  • doc.Save(fichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la modification de l'attribut : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Affecte à l'attribut "nom" la valeur "valeur" à l'élément pointé par le n-ième chemin "path"
  • ''' La première position est 0
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <param name="valeur"></param>
  • ''' <param name="position"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : setAttribute("/cd/piste","numero", "3", 2)
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub setAttribute(ByVal path As String, ByVal nom As String, ByVal valeur As String, ByVal position As Integer)
  • Try
  • 'on charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'déclarations
  • Dim root As XmlNode = doc.SelectNodes(path).ItemOf(position)
  • Dim attrib As XmlAttribute = doc.CreateAttribute(nom)
  • 'valorisation de l'attribut
  • attrib.InnerText = valeur
  • 'ajout de l'attribut à l'élément
  • root.Attributes.Append(attrib)
  • 'sauvegarde
  • doc.Save(fichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la modification de l'attribut : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Retourne la valeur de l'attribut "nom" de l'élément pointé par le premier chemin "path"
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <returns></returns>
  • ''' <remarks>
  • ''' Utilisation | exemple : getAttribute("/cd/piste","numero")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function getAttribute(ByVal path As String, ByVal nom As String) As String
  • Dim valeur As String
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'declarations
  • Dim root As XmlNode = doc.SelectSingleNode(path)
  • Dim attrib As XmlAttribute = root.Attributes.GetNamedItem(nom)
  • 'récupération de la valeur de l'attribut
  • valeur = attrib.InnerText()
  • Catch e As Exception
  • MsgBox("Erreur dans le retour de l'attribut : " & e.Message)
  • End Try
  • Return valeur
  • End Function
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Retourne la valeur de l'attribut "nom" de l'élément pointé par le n-ième chemin "path"
  • ''' La première position est 0
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="nom"></param>
  • ''' <returns></returns>
  • ''' <remarks>
  • ''' Utilisation | exemple : getAttribute("/cd/piste","numero", 0)
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function getAttribute(ByVal path As String, ByVal nom As String, ByVal position As Integer) As String
  • Dim valeur As String
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'declarations
  • Dim root As XmlNode = doc.SelectNodes(path).ItemOf(position)
  • Dim attrib As XmlAttribute = root.Attributes.GetNamedItem(nom)
  • 'récupération de la valeur de l'attribut
  • valeur = attrib.InnerText()
  • Catch e As Exception
  • MsgBox("Erreur dans le retour de l'attribut : " & e.Message)
  • End Try
  • 'retourne la valeur de l'attribut
  • Return valeur
  • End Function
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Ajoute l'element racine "nom"
  • ''' </summary>
  • ''' <param name="nom"></param>
  • ''' <remarks>
  • ''' Utilisation | exemple : createRoot("Bibliothèque")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub createRoot(ByVal nom As String)
  • Try
  • 'déclare un nouveau document xml
  • Dim doc As New XmlDocument
  • 'lui ajoute son entête et la balise racine
  • doc.LoadXml("<?xml version='1.0' encoding='ISO-8859-1'?>" & _
  • "<" & nom & ">" & _
  • "</" & nom & ">")
  • 'sauvegarde les modifications
  • doc.Save(fichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la création de la racine : " & e.Message)
  • End Try
  • End Sub
  • '''
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Crée un nouveau fichier vierge
  • ''' </summary>
  • ''' <param name="nomFichier">[Chemin et ] Nom du fichier</param>
  • ''' <remarks>
  • ''' Veiller à ce que le fichier n'existe pas déjà sous peine d'écrasement de l'existant
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub createNewFile(ByVal nomFichier As String)
  • Try
  • 'creation d'un nouveau fichier
  • System.IO.File.Create(nomFichier)
  • Catch e As Exception
  • MsgBox("Erreur dans la création du fichier : " & e.Message)
  • End Try
  • End Sub
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Permet de renvoyer sous forme de chaine le contenu du fichier XML.
  • ''' </summary>
  • ''' <returns>Une chaine de caractères</returns>
  • ''' <remarks>
  • ''' Le document contient des retours à la ligne pour une meilleure lecture
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function getFormatedXMLString() As String
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'retourne le contenu intégral du fichier dans une chaine
  • Return (doc.OuterXml).Replace("><", ">" & vbNewLine & "<")
  • End Function
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Renvoie le numéro de l'élément pointé par path et de valeur valeur
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <param name="valeur"></param>
  • ''' <returns>Un entier</returns>
  • ''' <remarks>
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function getIndexOfElement(ByVal path As String, ByVal valeur As String) As Integer
  • Dim num As Integer = -1
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'déclarations
  • Dim nodes As XmlNodeList = doc.SelectNodes(path)
  • Dim nod As XmlElement
  • Dim trouve As Boolean = False
  • 'recherche de l'élément
  • For Each nod In nodes
  • num = num + 1
  • 'si la valeur de l'élément correspond à la valeur cherchée alors
  • If nod.InnerText = valeur Then
  • trouve = True
  • Exit For
  • End If
  • Next
  • 'si non trouvé num <-- -1
  • If Not trouve Then num = -1
  • 'on retourne la position
  • Catch e As Exception
  • MsgBox("Erreur de retour de l'index : " & e.Message)
  • End Try
  • Return num
  • End Function
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Renvoie le nombre d'éléments pointés par path
  • ''' </summary>
  • ''' <param name="path"></param>
  • ''' <returns>Un entier</returns>
  • ''' <remarks>
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function countElements(ByVal path As String) As Integer
  • Dim nb As Integer = 0
  • Try
  • 'Charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'Compte les éléments correspondants au chemin
  • nb = doc.SelectNodes(path).Count
  • Catch e As Exception
  • MsgBox("Erreur dans le comptage des éléments : " & e.Message)
  • nb = -1
  • End Try
  • 'retourne la valeur
  • Return nb
  • End Function
  • End Class
Imports System.Xml
Imports System.Xml.XPath

''' -----------------------------------------------------------------------------
''' Project	 : GabXMLClass
''' Class	 : GabXML
''' 
''' -----------------------------------------------------------------------------
''' <summary>
''' GabXML permet une gestion facile des documents XML
''' </summary>
''' <remarks>
''' GabXML doit être instanciée avant d'être utilisée
''' </remarks>
''' <history>
''' 	[Gabriel]	11/05/2005	Created
''' </history>
''' -----------------------------------------------------------------------------
Public Class GabXML

    'Le nom du fichier xml sur lequel on travaillera
    Private fichier As String

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Constructeur de la classe
    ''' </summary>
    ''' <param name="leFichier"></param>
    ''' <remarks>
    ''' leFichier doit obligatoirement être un fichier existant
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub New(ByVal leFichier As String)
        If System.IO.File.Exists(leFichier) Then
            fichier = leFichier
        End If
    End Sub

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Constructeur de la classe
    ''' </summary>
    ''' <remarks>
    ''' Ne nécessite pas de fichier xml existant
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub New()
        fichier = ""
    End Sub

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' définit/retourne le nom du fichier
    ''' </summary>
    ''' <value>Un fichier .xml existant</value>
    ''' <remarks>
    ''' Veillez à indiquer un fichier XML existant!
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Property leFichier() As String
        Get
            Return fichier
        End Get
        Set(ByVal Value As String)
            fichier = Value
        End Set
    End Property

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Objectif : Renvoie la valeur de l'élément pointé par le chemin path du fichier file
    ''' </summary>
    ''' <param name="path"></param>
    ''' <returns>Chaine de caractères</returns>
    ''' <remarks>
    ''' Utilisation | exemple : getElementValue("/cd/artiste/nom")
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Function getElementValue(ByVal path As String) As String

        'declarations
        Dim valeur As String = ""

        Try
            'on charge le fchier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'récupère la valeur du premier élément
            valeur = doc.SelectSingleNode(path).FirstChild.InnerText()
            'libère les ressources
            doc = Nothing
        Catch e As Exception
            'en cas d'erreur
            MsgBox(e.Message)
            valeur = "error"
        End Try

        Return valeur

    End Function

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Objectif : Renvoie la valeur de l'élément pointé par le n-ième chemin path du fichier file
    ''' La première position est 0
    ''' </summary>
    ''' <param name="path"></param>
    ''' <param name="position"></param>
    ''' <returns>Chaine de caractères</returns>
    ''' <remarks>
    ''' Utilisation | exemple : getElementValue("/cd/artiste/nom")
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Function getElementValue(ByVal path As String, ByVal position As Integer) As String

        'declarations
        Dim valeur As String = ""

        Try
            'on charge le fchier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'récupère la valeur du premier élément
            valeur = doc.SelectNodes(path).ItemOf(position).FirstChild.InnerText()
            'libère les ressources
            doc = Nothing
        Catch e As Exception
            'en cas d'erreur
            MsgBox(e.Message)
            valeur = "error"
        End Try

        Return valeur

    End Function

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Ecrit la valeur pour le premier élément pointé par le chemin path
    ''' </summary>
    ''' <param name="path"></param>
    ''' <param name="valeur"></param>
    ''' <remarks>
    ''' Utilisation | exemple : setElementValue("/cd/artiste/nom", "Aphex Twin")
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub setElementValue(ByVal path As String, ByVal valeur As String)

        Try

            'charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'definit la racine de l'element a modifier
            Dim parent As XmlNode = doc.SelectSingleNode(path).ParentNode

            'définit la node
            Dim node As XmlNode = doc.SelectSingleNode(path)

            'Si le noeud a des enfants alors il faut sauver les enfants
            If node.HasChildNodes Then

                'creation d'un nouvel element
                Dim clone As XmlElement = doc.CreateElement(node.Name)

                'on lui assigne la nouvelle valeur
                clone.InnerText = valeur

                'copie des enfants du noeud dans le nouvel element
                Dim child As XmlNode
                For Each child In node.ChildNodes
                    If child.GetType.ToString <> "System.Xml.XmlText" Then
                        clone.AppendChild(child.Clone())
                    End If
                    parent.ReplaceChild(clone, node)
                    node = clone
                Next
            Else  'sinon on change juste la valeur

                'creation d'un nouvel element
                Dim elem As XmlElement = doc.CreateElement(node.Name)

                'on lui assigne la nouvelle valeur
                elem.InnerText = valeur

                'on remplace par la nouvelle node
                parent.ReplaceChild(elem, node)
            End If

            'Sauve les modifications
            doc.Save(fichier)

            doc = Nothing

        Catch e As Exception

            MsgBox("setSettings <> Erreur dans la modification de " & fichier & " : " & e.Message)

        End Try

    End Sub

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Ecrit la valeur pour le n-ième élément pointé par le chemin path
    ''' Attention : Le premier noeud possède la position 0
    ''' </summary>
    ''' <param name="path"></param>
    ''' <param name="valeur"></param>
    ''' <param name="position"></param>
    ''' <remarks>
    ''' Utilisation | exemple : setElementValue("/cd/artiste/nom", "Aphex Twin",1)
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub setElementValue(ByVal path As String, ByVal valeur As String, ByVal position As Integer)

        Try

            'charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'definit la racine de l'element a modifier
            Dim parent As XmlNode = doc.SelectNodes(path).ItemOf(position).ParentNode

            'définit la node
            Dim node As XmlNode = doc.SelectNodes(path).ItemOf(position)

            'Si le noeud a des enfants alors il faut sauver les enfants
            If node.HasChildNodes Then

                'creation d'un nouvel element
                Dim clone As XmlElement = doc.CreateElement(node.Name)

                'on lui assigne la nouvelle valeur
                clone.InnerText = valeur

                'copie des enfants du noeud dans le nouvel element
                Dim child As XmlNode
                For Each child In node.ChildNodes
                    If child.GetType.ToString <> "System.Xml.XmlText" Then
                        clone.AppendChild(child.Clone())
                    End If
                    parent.ReplaceChild(clone, node)
                    node = clone
                Next
            Else  'sinon on change juste la valeur

                'creation d'un nouvel element
                Dim elem As XmlElement = doc.CreateElement(node.Name)

                'on lui assigne la nouvelle valeur
                elem.InnerText = valeur

                'on remplace par la nouvelle node
                parent.ReplaceChild(elem, node)
            End If

            'Sauve les modifications
            doc.Save(fichier)

            doc = Nothing

        Catch e As Exception

            MsgBox("setSettings <> Erreur dans la modification de " & fichier & " : " & e.Message)

        End Try

    End Sub

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Ajoute un element pointé par le chemin path
    ''' </summary>
    ''' <param name="path"></param>
    ''' <param name="nom"></param>
    ''' <param name="valeur"></param>
    ''' <remarks>
    ''' Utilisation | exemple : addElement("/cd/artiste", "nom", "Aphex Twin")
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub addElement(ByVal path As String, ByVal nom As String, ByVal valeur As String)

        Try
            'charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'selectionne le noeud parent de l'élément à ajouter
            Dim root As XmlNode = doc.SelectSingleNode(path)

            'création du nouvel élément
            Dim elem As XmlElement = doc.CreateElement(nom)

            'on lui assigne une valeur
            elem.InnerText = valeur

            'puis on l'ajoute au noeud parent
            root.AppendChild(elem)

            'on sauvegarde
            doc.Save(fichier)

        Catch e As Exception
            MsgBox("Erreur dans la création de l'élément : " & e.Message)
        End Try

    End Sub

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Ajoute un element pointé par le n-ième chemin path
    ''' La première position est 0
    ''' </summary>
    ''' <param name="path"></param>
    ''' <param name="nom"></param>
    ''' <param name="valeur"></param>
    ''' <param name="position"></param>
    ''' <remarks>
    ''' Utilisation | exemple : addElement("/cd/artiste", "nom", "Aphex Twin", 2)
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	11/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub addElement(ByVal path As String, ByVal nom As String, ByVal valeur As String, ByVal position As Integer)

        Try
            'charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'selectionne le noeud parent de l'élément à ajouter
            Dim root As XmlNode = doc.SelectNodes(path).ItemOf(position)

            'création du nouvel élément
            Dim elem As XmlElement = doc.CreateElement(nom)

            'on lui assigne une valeur
            elem.InnerText = valeur

            'puis on l'ajoute au noeud parent
            root.AppendChild(elem)

            'on sauvegarde
            doc.Save(fichier)

        Catch e As Exception
            MsgBox("Erreur dans la création de l'élément : " & e.Message)
        End Try

    End Sub

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' supprime le premier element pointé par le chemin path
    ''' </summary>
    ''' <param name="path"></param>
    ''' <param name="nom"></param>
    ''' <remarks>
    ''' Utilisation | exemple : deleteElement("/cd/artiste/nom", "Aphex Twin")
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	11/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub deleteElement(ByVal path As String, ByVal nom As String)

        Try
            'charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'selectionne le noeud parent de l'élément à supprimer
            Dim root As XmlNode = doc.SelectSingleNode(path)

            'selectionne l'élément à supprimer
            Dim elem As XmlElement = doc.SelectSingleNode(path & "/" & nom)

            'supprime l'élément
            root.RemoveChild(elem)

            'sauvegarde
            doc.Save(fichier)

        Catch e As Exception
            MsgBox("Erreur dans la suppression de l'élément : " & e.Message)
        End Try
    End Sub

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' supprime le n-ième element pointé par le chemin path
    ''' </summary>
    ''' <param name="path"></param>
    ''' <param name="nom"></param>
    ''' <param name="position"></param>
    ''' <remarks>
    ''' Utilisation | exemple : deleteElement("/cd/artiste/nom", "Aphex Twin", 2)
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	11/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub deleteElement(ByVal path As String, ByVal nom As String, ByVal position As Integer)

        Try
            'charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'selectionne le noeud parent de l'élément à supprimer
            Dim root As XmlNode = doc.SelectSingleNode(path)

            'selectionne l'élément à supprimer
            Dim elem As XmlElement = doc.SelectNodes(path & "/" & nom).ItemOf(position)

            'supprime l'élément
            root.RemoveChild(elem)

            'sauvegarde
            doc.Save(fichier)

        Catch e As Exception
            MsgBox("Erreur dans la suppression de l'élément : " & e.Message)
        End Try
    End Sub

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Ajoute un attribut "nom" de valeur "valeur" à l'élément pointé par le chemin path
    ''' </summary>
    ''' <param name="path"></param>
    ''' <param name="nom"></param>
    ''' <param name="valeur"></param>
    ''' <remarks>
    ''' Utilisation | exemple : addAttribute("/cd/piste","numero", "3")
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	11/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub addAttribute(ByVal path As String, ByVal nom As String, ByVal valeur As String)

        Try
            'charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'declaration de l'élément auquel on ajoutera un attribut et de l'attribut en question
            Dim root As XmlNode = doc.SelectSingleNode(path)
            Dim attrib As XmlAttribute = doc.CreateAttribute(nom)

            'on valorise l'attribut
            attrib.InnerText = valeur

            'on ajoute l'attribut à l'élément
            root.Attributes.Append(attrib)

            'et on sauvegarde
            doc.Save(fichier)

        Catch e As Exception
            MsgBox("Erreur dans la création de l'attribut : " & e.Message)
        End Try

    End Sub

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Ajoute un attribut "nom" de valeur "valeur" à l'élément pointé par le n-ième chemin path
    ''' La première position est 0
    ''' </summary>
    ''' <param name="path"></param>
    ''' <param name="nom"></param>
    ''' <param name="valeur"></param>
    ''' <param name="position"></param>
    ''' <remarks>
    ''' Utilisation | exemple : addAttribute("/cd/piste","numero", "3", 0)
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	11/05/2005	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub addAttribute(ByVal path As String, ByVal nom As String, ByVal valeur As String, ByVal position As Integer)

        Try
            'charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'declaration de l'élément auquel on ajoutera un attribut et de l'attribut en question
            Dim root As XmlNodeList = doc.SelectNodes(path)
            Dim attrib As XmlAttribute = doc.CreateAttribute(nom)

            'on valorise l'attribut
            attrib.InnerText = valeur

            'on ajoute l'attribut à l'élément
            root.ItemOf(position).Attributes.Append(attrib)

            'et on sauvegarde
            doc.Save(fichier)

        Catch e As Exception
            MsgBox