|
begin process at 2008 07 06 02:42:25
Derniers logiciels
|
Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
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
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 |
|