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 ) Classé sous : xml, xpath, classe, vb, gabxml Niveau : Initié Date de création : 31/03/2005 Date de mise à jour : 06/06/2009 20:30:25 Vu / téléchargé: 23 903 / 2 107

Note :
7,92 / 10 - par 12 personnes
7,92 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

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

Elle fonctionne avec des requêtes XPath (cela ressemble à une arborescence de fichiers).
Ainsi, par exemple :
<?xml version="1.0"?>
<root>
    <test>
        <valeur>ceci est un test</valeur>
        <valeur>ceci est un autre test</valeur>
        <valeur attr="12345">ceci est une dernière valeur</valeur>
        <valeur attr="98765">ceci est une autre dernière valeur</valeur>
    </test>
    <test>
        <valeur>ceci est un 2ème test</valeur>
        <valeur>ceci est un autre 2ème test</valeur>
        <valeur attr="6789">ceci est une 2ème dernière valeur</valeur>
    </test>
</root>

Quelques exemples :
Le chemin XPath du premier élément "valeur" est "/root/test/valeur" ou encore "/root/test[1]/valeur[1]"...
/root/test[2]/valeur[2] = "ceci est un autre 2ème test"
/root/test[1]/valeur[@attr] = "ceci est une dernière valeur"
/root/test[1]/valeur[@attr='98765'] = "ceci est une autre dernière valeur"
/root/test[1]/valeur[3]/@attr = "12345"
etc...
Lire http://www.mangue.org/wiki/XPath pour la syntaxe des requêtes XPath

Ma classe permet de changer la valeur de ces éléments par exemple, sans réécriture complète 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) utilisait cette classe.
 

Source

  • Imports System.Xml
  • Imports System.Xml.XPath
  • Imports System.IO
  • ''' -----------------------------------------------------------------------------
  • ''' Project : GabXMLClass
  • ''' Class : GabXML
  • '''
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' GabXML permet une gestion facile des documents XML grâce à XPath.
  • ''' </summary>
  • ''' <remarks>
  • ''' GabXML doit être instanciée avant d'être utilisée.
  • ''' Voir par exemple http://www.mangue.org/wiki/XPath pour la syntaxe des requêtes XPath
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 11/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated :
  • ''' - Ajout des méhodes SelectValue, SelectFirstNode, SelectNodes et SetNode
  • ''' - Suppression des méthodes en double : le paramètre index est maintenant optionnel (valeur par défaut : 1)
  • ''' - Meilleure utilisation des requêtes XPath
  • ''' - Position devient Index
  • ''' - Une erreur est jetée si le fichier n'existe pas
  • ''' - Compilé avec succès sous Visual Studio 2008
  • ''' </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
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub New(ByVal leFichier As String)
  • If System.IO.File.Exists(leFichier) Then
  • fichier = leFichier
  • Else
  • Throw New FileNotFoundException("Le fichier " & leFichier & " est introuvable !")
  • 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
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </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
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Property leFichier() As String
  • Get
  • Return fichier
  • End Get
  • Set(ByVal Value As String)
  • fichier = Value
  • End Set
  • End Property
  • ''' <summary>
  • ''' Retourne la valeur du premier noeud correspondant à la requête XPath.
  • ''' Cette fonction devrait être la plus utilisée car elle permet de retourner le résultat de n'importe quelle requête XPath.
  • ''' Quelques exemples qui montrent la puissance de XPath :
  • ''' /cd/piste[5]/titre/text() renvoie le titre de la piste 5
  • ''' /cd/piste[@numero='3']/titre renvoie le titre de la piste dont l'attribut numéro est '3'
  • ''' /cd[artiste='Pink Floyd'][3]/piste[5]/titre renvoie le titre de la 5ème piste du 3ème CD ayant "Pink Floyd" comme artiste.
  • ''' /cd[artiste='Pink Floyd' and id='PF004']/piste[2]/duree renvoie la durée de la seconde piste du CD de Pink Floyd ayant l'ID 'PF004'
  • ''' </summary>
  • ''' <param name="query">Une requête XPath de sélection</param>
  • ''' <returns>Une chaine de caractère contenant la valeur du noeud</returns>
  • ''' <remarks></remarks>
  • ''' <history>
  • ''' [Gabriel] 06/06/2009 Created
  • ''' </history>
  • Public Function SelectValue(ByVal query As String) As String
  • 'déclarations
  • Dim valeur As String = String.Empty
  • Try
  • 'on charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'execute et récupère la valeur de la requête
  • valeur = doc.SelectSingleNode(query).InnerText
  • 'libère les ressources
  • doc = Nothing
  • Catch ex As Exception
  • 'en cas d'erreur
  • MsgBox(ex.Message)
  • valeur = "error"
  • End Try
  • Return valeur
  • End Function
  • ''' <summary>
  • ''' Remplace le premier noeud correspondant à la requête XPath par un nouveau.
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath de sélection</param>
  • ''' <param name="node">Un noeud (XmlNode)</param>
  • ''' <remarks></remarks>
  • ''' <history>
  • ''' [Gabriel] 06/06/2009 Created
  • ''' </history>
  • Public Sub SetNode(ByVal xpath As String, ByVal node As XmlNode, Optional ByVal index As Integer = 1)
  • 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(xpath).ItemOf(index - 1).ParentNode
  • 'cherche le noeud à remplacer
  • Dim n As XmlNode = doc.SelectNodes(xpath).ItemOf(index - 1)
  • 'on remplace par le nouveau noeud
  • parent.ReplaceChild(n, node)
  • '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>
  • ''' Retourne le premier noeud correspondant à la requête XPath, Nothing si aucun noeud n'est trouvé
  • ''' </summary>
  • ''' <param name="xpath">La requête XPath</param>
  • ''' <returns>Un noeud (XmlNode)</returns>
  • ''' <remarks></remarks>
  • ''' <history>
  • ''' [Gabriel] 06/06/2009 Created
  • ''' </history>
  • Public Function SelectFirstNode(ByVal xpath As String) As XmlNode
  • 'déclarations
  • Dim n As XmlNode
  • Try
  • 'on charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'execute et récupère la valeur de la requête
  • n = doc.SelectSingleNode(xpath)
  • 'libère les ressources
  • doc = Nothing
  • Catch ex As Exception
  • 'en cas d'erreur
  • MsgBox(ex.Message)
  • n = Nothing
  • End Try
  • Return n
  • End Function
  • ''' <summary>
  • ''' Retourne la liste des noeuds correspondants à la requête XPath ou Nothing si rien n'est trouvé
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <returns>Une liste de noeuds (XmlNodeList)</returns>
  • ''' <remarks></remarks>
  • ''' <history>
  • ''' [Gabriel] 06/06/2009 Created
  • ''' </history>
  • Public Function SelectNodes(ByVal xpath As String) As XmlNodeList
  • 'déclarations
  • Dim nl As XmlNodeList
  • Try
  • 'on charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'execute et récupère la valeur de la requête
  • nl = doc.SelectNodes(xpath)
  • 'libère les ressources
  • doc = Nothing
  • Catch ex As Exception
  • 'en cas d'erreur
  • MsgBox(ex.Message)
  • nl = Nothing
  • End Try
  • Return nl
  • End Function
  • ''' -----------------------------------------------------------------------------
  • ''' <summary>
  • ''' Objectif : Renvoie la valeur du n-ème élément pointé par la requête XPath
  • ''' Attention : Le premier noeud possède l'index 1
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <param name="index">L'index de l'élément</param>
  • ''' <returns>Chaine de caractères</returns>
  • ''' <remarks>
  • ''' Utilisation |
  • ''' exemple 1 : getElementValue("/polygone/point", 2) renvoie la valeur du 2ème "point" de "polygone" |
  • ''' exemple 2 : getElementValue("/polygone/point[2]") renvoie la même chose
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function getElementValue(ByVal xpath As String, Optional ByVal index As Integer = 1) As String
  • 'declarations
  • Dim valeur As String = String.Empty
  • Try
  • 'on charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'récupère la valeur du premier élément
  • valeur = doc.SelectNodes(xpath).ItemOf(index - 1).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 n-ième élément pointé par la requête path
  • ''' Attention : Le premier noeud possède l'index 1
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <param name="valeur">La valeur à écrire</param>
  • ''' <param name="index">L'index de l'élément dans lequel écrire</param>
  • ''' <remarks>
  • ''' Utilisation |
  • ''' exemple 1 : setElementValue("/polygone/point", "30;40", 5) spécifie que le 5ème élément "point" de "polygone" aura comme valeur "(30;40)" |
  • ''' exemple 2 : setElementValue("/polygone/point[5]", "30;40") fait exactement la même chose.
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub setElementValue(ByVal xpath As String, ByVal valeur As String, Optional ByVal index As Integer = 1)
  • 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(xpath).ItemOf(index - 1).ParentNode
  • 'définit le noeud
  • Dim node As XmlNode = doc.SelectNodes(xpath).ItemOf(index - 1)
  • '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 le nouveau noeud
  • 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 n-ième noeud de la requête XPath
  • ''' Attention : Le premier noeud possède l'index 1
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <param name="nom">Le nom de l'élément à ajouter</param>
  • ''' <param name="valeur">La valeur de l'élément à ajouter</param>
  • ''' <param name="index">L'index de l'élément parent dans lequel on ajoute l'élément enfant "nom"</param>
  • ''' <remarks>
  • ''' Utilisation |
  • ''' exemple 1 : addElement("/cd/piste", "titre", "54 Cymru beats", 5) ajoute un élément enfant "titre" au 5ème élément "piste", sa valeur sera "54 Cymru beats" |
  • ''' exemple 2 : addElement("/cd/piste[5]", "titre", "54 Cymru beats") fait exactement la même chose.
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub addElement(ByVal xpath As String, ByVal nom As String, ByVal valeur As String, Optional ByVal index As Integer = 1)
  • 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(xpath).ItemOf(index)
  • '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 n-ième element pointé par la requête XPath
  • ''' Attention : Le premier noeud possède l'index 1
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <param name="nom">Le nom de l'élément à supprimer</param>
  • ''' <param name="index">L'index de l'élément à supprimer</param>
  • ''' <remarks>
  • ''' Utilisation |
  • ''' exemple : deleteElement("/cd", "piste", 3) supprime le 3ème élément "piste"
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub deleteElement(ByVal xpath As String, ByVal nom As String, Optional ByVal index As Integer = 1)
  • 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(xpath)
  • 'selectionne l'élément à supprimer
  • Dim elem As XmlElement = doc.SelectNodes(xpath & "/" & nom).ItemOf(index - 1)
  • '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 1er élément pointé par la requête XPath
  • ''' Attention : Le premier noeud possède l'index 1
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <remarks>
  • ''' Utilisation |
  • ''' exemple 1 : deleteElement("/cd/piste[3]) supprime le 3ème élément "piste"
  • ''' exemple 2 : deleteElement("/cd/piste) supprime la première piste uniquement
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub deleteElement(ByVal xpath 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(xpath).ParentNode
  • 'selectionne l'élément à supprimer
  • Dim elem As XmlElement = doc.SelectSingleNode(xpath)
  • '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" n-ième élément pointé par la requête XPath
  • ''' Attention : Le premier noeud possède l'index 1
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <param name="nom">Le nom de l'attribut à ajouter</param>
  • ''' <param name="valeur">La valeur de l'attribut à ajouter</param>
  • ''' <param name="index">L'index de l'élément auquel on ajoute l'attribut</param>
  • ''' <remarks>
  • ''' Utilisation |
  • ''' exemple 1 : addAttribute("/cd/piste","numero", "3", 5) ajoute l'attribut "numero" de valeur "3" au 5ème élément "piste" du "cd"
  • ''' exemple 2 : addAttribute("/cd/piste[5]","numero", "3") fait la même chose.
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub addAttribute(ByVal xpath As String, ByVal nom As String, ByVal valeur As String, Optional ByVal index As Integer = 1)
  • 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(xpath)
  • Dim attrib As XmlAttribute = doc.CreateAttribute(nom)
  • 'on valorise l'attribut
  • attrib.InnerText = valeur
  • 'on ajoute l'attribut à l'élément
  • root.ItemOf(index - 1).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" au n-ième élément pointé par la requête "path"
  • ''' Attention : Le premier noeud possède l'index 1
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <param name="nom">Le nom de l'attribut à affecter</param>
  • ''' <param name="valeur">La nouvelle valeur de l'attribut</param>
  • ''' <param name="index">L'index de l'élément auquel on affecte la nouvelle valeur de l'attribut</param>
  • ''' <remarks>
  • ''' Utilisation |
  • ''' exemple 1 : setAttribute("/cd/piste","numero", "3", 5) définit l'attribut "numero" du 5ème élément "piste" de "cd" à la valeur "3"
  • ''' exemple 2 : setAttribute("/cd/piste[5]","numero", "3") fait exactement la même chose
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub setAttribute(ByVal xpath As String, ByVal nom As String, ByVal valeur As String, Optional ByVal index As Integer = 1)
  • Try
  • 'on charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'déclarations
  • Dim root As XmlNode = doc.SelectNodes(xpath).ItemOf(index - 1)
  • 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" du n-ième élément pointé par la requête "XPath"
  • ''' Attention : Le premier noeud possède l'index 1
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <param name="nom">Le nom de l'attribut dont la valeur sera retournée</param>
  • ''' <param name="index">L'index de l'élément auquel appartient l'attribut</param>
  • ''' <returns>La valeur de l'attribut sélectionné</returns>
  • ''' <remarks>
  • ''' Utilisation |
  • ''' exemple 1 : getAttribute("/cd/piste","numero", 5) retourne la valeur de l'attribut "numero" du 5ème élément "piste" de "cd"
  • ''' exemple 2 : getAttribute("/cd/piste[5]","numero") fait la même chose.
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function getAttribute(ByVal xpath As String, ByVal nom As String, Optional ByVal index As Integer = 1) As String
  • Dim valeur As String = String.Empty
  • Try
  • 'charge le fichier xml
  • Dim doc As New XmlDocument
  • doc.Load(fichier)
  • 'declarations
  • Dim root As XmlNode = doc.SelectNodes(xpath).ItemOf(index - 1)
  • 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">Le nom de l'élément racine qui sera créé</param>
  • ''' <remarks>
  • ''' Utilisation | exemple : createRoot("Bibliothèque")
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Sub createRoot(ByVal nom As String, Optional ByVal encoding As String = "ISO-8859-1")
  • 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='" & encoding & "'?>" & _
  • "<" & 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] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </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] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </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 l'index de l'élément pointé par XPath et de valeur valeur, -1 si pas trouvé
  • ''' Attention : Le premier noeud possède l'index 1
  • ''' </summary>
  • ''' <param name="xpath">Une requête XPath</param>
  • ''' <param name="valeur">La valeur à rechercher</param>
  • ''' <returns>Un entier</returns>
  • ''' <remarks>
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function getIndexOfElementContaining(ByVal xpath 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(xpath)
  • 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
  • num += 1
  • 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 XPath
  • ''' </summary>
  • ''' <param name="xpath"></param>
  • ''' <returns>Un entier</returns>
  • ''' <remarks>
  • ''' </remarks>
  • ''' <history>
  • ''' [Gabriel] 10/05/2005 Created
  • ''' [Gabriel] 06/06/2009 Updated
  • ''' </history>
  • ''' -----------------------------------------------------------------------------
  • Public Function countElements(ByVal xpath 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(xpath).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
Imports System.IO

''' -----------------------------------------------------------------------------
''' Project	 : GabXMLClass
''' Class	 : GabXML
''' 
''' -----------------------------------------------------------------------------
''' <summary>
''' GabXML permet une gestion facile des documents XML grâce à XPath.
''' </summary>
''' <remarks>
''' GabXML doit être instanciée avant d'être utilisée.
''' Voir par exemple http://www.mangue.org/wiki/XPath pour la syntaxe des requêtes XPath
''' </remarks>
''' <history>
''' 	[Gabriel]   11/05/2005	Created
'''     [Gabriel]   06/06/2009  Updated :
'''                 - Ajout des méhodes SelectValue, SelectFirstNode, SelectNodes et SetNode
'''                 - Suppression des méthodes en double : le paramètre index est maintenant optionnel (valeur par défaut : 1)
'''                 - Meilleure utilisation des requêtes XPath
'''                 - Position devient Index
'''                 - Une erreur est jetée si le fichier n'existe pas
'''                 - Compilé avec succès sous Visual Studio 2008
''' </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
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub New(ByVal leFichier As String)
        If System.IO.File.Exists(leFichier) Then
            fichier = leFichier
        Else
            Throw New FileNotFoundException("Le fichier " & leFichier & " est introuvable !")
        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
    '''     [Gabriel]   06/06/2009  Updated
    ''' </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
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Property leFichier() As String
        Get
            Return fichier
        End Get
        Set(ByVal Value As String)
            fichier = Value
        End Set
    End Property

    ''' <summary>
    ''' Retourne la valeur du premier noeud correspondant à la requête XPath.
    ''' Cette fonction devrait être la plus utilisée car elle permet de retourner le résultat de n'importe quelle requête XPath.
    ''' Quelques exemples qui montrent la puissance de XPath :
    ''' /cd/piste[5]/titre/text() renvoie le titre de la piste 5
    ''' /cd/piste[@numero='3']/titre renvoie le titre de la piste dont l'attribut numéro est '3'
    ''' /cd[artiste='Pink Floyd'][3]/piste[5]/titre renvoie le titre de la 5ème piste du 3ème CD ayant "Pink Floyd" comme artiste.
    ''' /cd[artiste='Pink Floyd' and id='PF004']/piste[2]/duree renvoie la durée de la seconde piste du CD de Pink Floyd ayant l'ID 'PF004'
    ''' </summary>
    ''' <param name="query">Une requête XPath de sélection</param>
    ''' <returns>Une chaine de caractère contenant la valeur du noeud</returns>
    ''' <remarks></remarks>
    ''' <history>
    '''     [Gabriel]   06/06/2009  Created
    ''' </history>
    Public Function SelectValue(ByVal query As String) As String

        'déclarations
        Dim valeur As String = String.Empty
        Try
            'on charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'execute et récupère la valeur de la requête
            valeur = doc.SelectSingleNode(query).InnerText

            'libère les ressources
            doc = Nothing

        Catch ex As Exception
            'en cas d'erreur
            MsgBox(ex.Message)
            valeur = "error"
        End Try

        Return valeur

    End Function

    ''' <summary>
    ''' Remplace le premier noeud correspondant à la requête XPath par un nouveau.
    ''' </summary>
    ''' <param name="xpath">Une requête XPath de sélection</param>
    ''' <param name="node">Un noeud (XmlNode)</param>
    ''' <remarks></remarks>
    ''' <history>
    '''     [Gabriel]   06/06/2009  Created
    ''' </history>
    Public Sub SetNode(ByVal xpath As String, ByVal node As XmlNode, Optional ByVal index As Integer = 1)
        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(xpath).ItemOf(index - 1).ParentNode

            'cherche le noeud à remplacer
            Dim n As XmlNode = doc.SelectNodes(xpath).ItemOf(index - 1)

            'on remplace par le nouveau noeud
            parent.ReplaceChild(n, node)

            '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>
    ''' Retourne le premier noeud correspondant à la requête XPath, Nothing si aucun noeud n'est trouvé
    ''' </summary>
    ''' <param name="xpath">La requête XPath</param>
    ''' <returns>Un noeud (XmlNode)</returns>
    ''' <remarks></remarks>
    ''' <history>
    '''     [Gabriel]   06/06/2009  Created
    ''' </history>
    Public Function SelectFirstNode(ByVal xpath As String) As XmlNode

        'déclarations
        Dim n As XmlNode
        Try
            'on charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'execute et récupère la valeur de la requête
            n = doc.SelectSingleNode(xpath)

            'libère les ressources
            doc = Nothing

        Catch ex As Exception
            'en cas d'erreur
            MsgBox(ex.Message)
            n = Nothing
        End Try

        Return n

    End Function

    ''' <summary>
    ''' Retourne la liste des noeuds correspondants à la requête XPath ou Nothing si rien n'est trouvé
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <returns>Une liste de noeuds (XmlNodeList)</returns>
    ''' <remarks></remarks>
    ''' <history>
    '''     [Gabriel]   06/06/2009  Created
    ''' </history>
    Public Function SelectNodes(ByVal xpath As String) As XmlNodeList

        'déclarations
        Dim nl As XmlNodeList
        Try
            'on charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'execute et récupère la valeur de la requête
            nl = doc.SelectNodes(xpath)

            'libère les ressources
            doc = Nothing

        Catch ex As Exception
            'en cas d'erreur
            MsgBox(ex.Message)
            nl = Nothing
        End Try

        Return nl

    End Function


    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Objectif : Renvoie la valeur du n-ème élément pointé par la requête XPath
    ''' Attention : Le premier noeud possède l'index 1
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <param name="index">L'index de l'élément</param>
    ''' <returns>Chaine de caractères</returns>
    ''' <remarks>
    ''' Utilisation |
    ''' exemple 1 : getElementValue("/polygone/point", 2) renvoie la valeur du 2ème "point" de "polygone" |
    ''' exemple 2 : getElementValue("/polygone/point[2]") renvoie la même chose
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Function getElementValue(ByVal xpath As String, Optional ByVal index As Integer = 1) As String

        'declarations
        Dim valeur As String = String.Empty

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

            'récupère la valeur du premier élément
            valeur = doc.SelectNodes(xpath).ItemOf(index - 1).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 n-ième élément pointé par la requête path
    ''' Attention : Le premier noeud possède l'index 1
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <param name="valeur">La valeur à écrire</param>
    ''' <param name="index">L'index de l'élément dans lequel écrire</param>
    ''' <remarks>
    ''' Utilisation |
    ''' exemple 1 : setElementValue("/polygone/point", "30;40", 5) spécifie que le 5ème élément "point" de "polygone" aura comme valeur "(30;40)" |
    ''' exemple 2 : setElementValue("/polygone/point[5]", "30;40") fait exactement la même chose.
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub setElementValue(ByVal xpath As String, ByVal valeur As String, Optional ByVal index As Integer = 1)

        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(xpath).ItemOf(index - 1).ParentNode

            'définit le noeud
            Dim node As XmlNode = doc.SelectNodes(xpath).ItemOf(index - 1)

            '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 le nouveau noeud
                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 n-ième noeud de la requête XPath
    ''' Attention : Le premier noeud possède l'index 1
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <param name="nom">Le nom de l'élément à ajouter</param>
    ''' <param name="valeur">La valeur de l'élément à ajouter</param>
    ''' <param name="index">L'index de l'élément parent dans lequel on ajoute l'élément enfant "nom"</param>
    ''' <remarks>
    ''' Utilisation |
    ''' exemple 1 : addElement("/cd/piste", "titre", "54 Cymru beats", 5) ajoute un élément enfant "titre" au 5ème élément "piste", sa valeur sera "54 Cymru beats" |
    ''' exemple 2 : addElement("/cd/piste[5]", "titre", "54 Cymru beats") fait exactement la même chose.
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub addElement(ByVal xpath As String, ByVal nom As String, ByVal valeur As String, Optional ByVal index As Integer = 1)

        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(xpath).ItemOf(index)

            '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 n-ième element pointé par la requête XPath
    ''' Attention : Le premier noeud possède l'index 1
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <param name="nom">Le nom de l'élément à supprimer</param>
    ''' <param name="index">L'index de l'élément à supprimer</param>
    ''' <remarks>
    ''' Utilisation |
    ''' exemple : deleteElement("/cd", "piste", 3) supprime le 3ème élément "piste"
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub deleteElement(ByVal xpath As String, ByVal nom As String, Optional ByVal index As Integer = 1)

        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(xpath)

            'selectionne l'élément à supprimer
            Dim elem As XmlElement = doc.SelectNodes(xpath & "/" & nom).ItemOf(index - 1)

            '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 1er élément pointé par la requête XPath
    ''' Attention : Le premier noeud possède l'index 1
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <remarks>
    ''' Utilisation |
    ''' exemple 1 : deleteElement("/cd/piste[3]) supprime le 3ème élément "piste"
    ''' exemple 2 : deleteElement("/cd/piste) supprime la première piste uniquement
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub deleteElement(ByVal xpath 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(xpath).ParentNode

            'selectionne l'élément à supprimer
            Dim elem As XmlElement = doc.SelectSingleNode(xpath)

            '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" n-ième élément pointé par la requête XPath
    ''' Attention : Le premier noeud possède l'index 1
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <param name="nom">Le nom de l'attribut à ajouter</param>
    ''' <param name="valeur">La valeur de l'attribut à ajouter</param>
    ''' <param name="index">L'index de l'élément auquel on ajoute l'attribut</param>
    ''' <remarks>
    ''' Utilisation |
    ''' exemple 1 : addAttribute("/cd/piste","numero", "3", 5) ajoute l'attribut "numero" de valeur "3" au 5ème élément "piste" du "cd"
    ''' exemple 2 : addAttribute("/cd/piste[5]","numero", "3") fait la même chose.
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub addAttribute(ByVal xpath As String, ByVal nom As String, ByVal valeur As String, Optional ByVal index As Integer = 1)

        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(xpath)
            Dim attrib As XmlAttribute = doc.CreateAttribute(nom)

            'on valorise l'attribut
            attrib.InnerText = valeur

            'on ajoute l'attribut à l'élément
            root.ItemOf(index - 1).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" au n-ième élément pointé par la requête "path"
    ''' Attention : Le premier noeud possède l'index 1
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <param name="nom">Le nom de l'attribut à affecter</param>
    ''' <param name="valeur">La nouvelle valeur de l'attribut</param>
    ''' <param name="index">L'index de l'élément auquel on affecte la nouvelle valeur de l'attribut</param>
    ''' <remarks>
    ''' Utilisation |
    ''' exemple 1 : setAttribute("/cd/piste","numero", "3", 5) définit l'attribut "numero" du 5ème élément "piste" de "cd" à la valeur "3"
    ''' exemple 2 : setAttribute("/cd/piste[5]","numero", "3") fait exactement la même chose
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub setAttribute(ByVal xpath As String, ByVal nom As String, ByVal valeur As String, Optional ByVal index As Integer = 1)

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

            'déclarations
            Dim root As XmlNode = doc.SelectNodes(xpath).ItemOf(index - 1)
            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" du n-ième élément pointé par la requête "XPath"
    ''' Attention : Le premier noeud possède l'index 1
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <param name="nom">Le nom de l'attribut dont la valeur sera retournée</param>
    ''' <param name="index">L'index de l'élément auquel appartient l'attribut</param>
    ''' <returns>La valeur de l'attribut sélectionné</returns>
    ''' <remarks>
    ''' Utilisation |
    ''' exemple 1 : getAttribute("/cd/piste","numero", 5) retourne la valeur de l'attribut "numero" du 5ème élément "piste" de "cd"
    ''' exemple 2 : getAttribute("/cd/piste[5]","numero") fait la même chose.
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Function getAttribute(ByVal xpath As String, ByVal nom As String, Optional ByVal index As Integer = 1) As String

        Dim valeur As String = String.Empty
        Try
            'charge le fichier xml
            Dim doc As New XmlDocument
            doc.Load(fichier)

            'declarations
            Dim root As XmlNode = doc.SelectNodes(xpath).ItemOf(index - 1)
            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">Le nom de l'élément racine qui sera créé</param>
    ''' <remarks>
    ''' Utilisation | exemple : createRoot("Bibliothèque")
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Sub createRoot(ByVal nom As String, Optional ByVal encoding As String = "ISO-8859-1")

        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='" & encoding & "'?>" & _
                         "<" & 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]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </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]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </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 l'index de l'élément pointé par XPath et de valeur valeur, -1 si pas trouvé
    ''' Attention : Le premier noeud possède l'index 1
    ''' </summary>
    ''' <param name="xpath">Une requête XPath</param>
    ''' <param name="valeur">La valeur à rechercher</param>
    ''' <returns>Un entier</returns>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Function getIndexOfElementContaining(ByVal xpath 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(xpath)
            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
                    num += 1
                    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 XPath
    ''' </summary>
    ''' <param name="xpath"></param>
    ''' <returns>Un entier</returns>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[Gabriel]	10/05/2005	Created
    '''     [Gabriel]   06/06/2009  Updated
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Function countElements(ByVal xpath 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(xpath).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

Conclusion

N'hésitez pas à me faire part de vos impressions, de vos remarques et de vos suggestions pour améliorer encore cette classe.
Bien sur vous pouvez l'utilisez si vous voulez, tant que mon nom est cité !

A noter que dans cette version, comme dit dans les commentaires, il manque une methode deleteNode, et cette classe sera sujette à quelques modifications d'ici peu.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

11 mai 2005 01:26:15 :
Mise à jour majeure: - prise en compte des élements de meme nom - création possible d'un nouveau fichier de A à Z - gestion évoluée des éléments et des attributs. - ajouts de vrais commentaires
05 juin 2005 23:31:12 :
Quelques bugs corrigés
24 juin 2005 20:30:22 :
- Correction du bug de DeleteElementAt - Corrections d'autres bugs (je ne me souviens plus desquels) - Les méthodes sont maintenant surchargées, plus de "At", ça fait moins lourd avec l'intellisense
16 septembre 2005 03:31:06 :
J'ai simplement ajouté des précisions dans l'annotation finale.
06 juin 2009 20:30:28 :
- Ajout des méhodes SelectValue, SelectFirstNode, SelectNodes et SetNode - Suppression des méthodes en double : le paramètre index est maintenant optionnel (valeur par défaut : 1) - Meilleure utilisation des requêtes XPath - Position devient Index - Une erreur est jetée si le fichier n'existe pas - Compilé avec succès sous Visual Studio 2008

Commentaires et avis

signaler à un administrateur
Commentaire de HALLLES le 27/05/2005 17:08:04

Bonjour.

Auriez vous un code pour écrire un petit editeur gérant les disques locaux (je reste coté client mais je dois emplir une  espece de forum avec des données multilingues, donc plusieurs alphabets) et Créer Ecrire Ajouter et Sauver des données sur disque.

Cela aurait la forme d un formulaire html, et des cases a remplir, une fois emplies les cases on sauve les données en deux fichiers un .TXT et un .XML sur mon disque local.

Merci de toute reponse.
Halles.

signaler à un administrateur
Commentaire de GabSoftware le 30/05/2005 02:57:16

Je suis désolé je ne vois pas trop ce que vous désirez, pourriez vous être plus précis?
Ma classe est en vb.NET, or je n'ai jamais fait d'aspx, mais si quelqu'un sait comment faire, qu'il n'hésite pas à aider HALLLES!

Sinon d'autres commentaires sur la classe elle-même? Des choses à améliorer? à ajouter? à retirer ? ...

signaler à un administrateur
Commentaire de sprayart le 21/06/2005 13:43:34

Bonjour,
je pense que les fonctions deleteElement et deleteElementAt sont identiques,
il manque dans la deuxieme le positionnement sur l'élément.    @+

signaler à un administrateur
Commentaire de GabSoftware le 24/06/2005 20:22:38

merci sprayart, je vais mettre à jour par une nouvelle version plus pratique en plus ! ;)

signaler à un administrateur
Commentaire de liquide le 26/06/2005 16:02:20

Tres bonne class, bonne base pour commencer a gerer le XML

signaler à un administrateur
Commentaire de GabSoftware le 30/06/2005 01:22:41

Merci beaucoup, ton commentaire m'encourage ! ^_^

N'hésitez pas à me demander de rajouter des fonctionnalités ou de me signaler les éventuels bugs !

signaler à un administrateur
Commentaire de GabSoftware le 11/08/2005 02:25:40

Personne d'autre n'a d'avis? ça m'aiderait à faire évoluer la classe!

signaler à un administrateur
Commentaire de MaDzA le 11/08/2005 11:46:05

salut! Moi je cherche comment supprimer un noeud. Mais le problème c'est que tu mets des variables (path et nom) mais je trouve pas a quoi ça correspond.
Peux-tu m'éclaircir stp?
en tout cas, merci a toi pour ta source

signaler à un administrateur
Commentaire de liquide le 11/08/2005 12:08:58

de visu, j'aurais obligé dans le sub new a donner un nom de fichier, cela permet de supprimer la property "Lefichier" et un "sub new", ensuite je remplacerais les nom "lefichier" en "File" plutot, afin de garder le caractere "standard", je trouve que "path" n'est pas forcement le bon terme dans les functions, il désigne en général un acces au disque dur et non un acces interne a un fichier XML. J'aurais mis un procédure d'effacement total, et je passerais les functions en overloads (bien que pas nécessaire). Je continue plus tard à détailler.

@+

signaler à un administrateur
Commentaire de GabSoftware le 12/09/2005 22:30:08

Merci liquide pour tes commentaires, j'en tiendrai compte dans ma prochaine version.


Réponse à MaDzA :
Il existe DeleteElement, mais comme son nom l'indique elle sert est plutot destinée à supprimer des éléments.
supposons un objet GabXML nommé X associé au fichier XML suivant :

<?xml version="1.0"?>
<test>
  <noeud>
    <element valeur="1" />
  </noeud>
</test>

Pour supprimer le noeud <noeud>, il suffit de faire :
X.DeleteElement("/test", "noeud")

C'est vrai qu'il manque une méthode DeleteNode, qui serait plus naturelle

signaler à un administrateur
Commentaire de MaDzA le 13/09/2005 20:07:39

Merci beaucoup pour ta reponse claire et précise GrabSoftware!
A bientôt a tous!

signaler à un administrateur
Commentaire de GabSoftware le 16/09/2005 03:33:08

à ton service ^^

signaler à un administrateur
Commentaire de ilham_layla le 19/10/2005 11:31:52

salut je suis une debutante en xml svp je veux un code simple et compréhensif

signaler à un administrateur
Commentaire de jojodeboulco le 26/10/2005 23:34:36

Super! Rien à dire.
Je ne fais pas du tout du VB, mais j'ai "adapté" ton code en C# pour mes besoins et je te dis un grand merci!
J'ai cherché un moment et je ne trouvais rien. Merci encore.

signaler à un administrateur
Commentaire de Arnaud71870 le 09/11/2005 16:20:54

Merci......

Je cherchais un code me permettant de générer un flux XML. Je suis en train d'adapter ta classe pour éviter de stocker les info dans un fichier.

Si je rajoute des fonctions je les mettrai en ligne .... encore que ta classe est plutot complete pour moi.

Thx pour le code.

signaler à un administrateur
Commentaire de GabSoftware le 17/11/2005 10:38:30

Bonjour,
ilham_layla : eh bien, cette classe a pour vocation d'être simple, non? :)
En tout cas, personnellement elle me simplifie beaucoup la vie!

jojodeboulco : merci !

Arnaud71870 : si tu veux, envoie moi un message privé pour me prévenir si tu a ajouté des fonctions, je pourrais les ajouter dans ma classe et la mettre à jour. Ca évitera d'avoir 2 sources presqu'identiques sur VB France ;)

signaler à un administrateur
Commentaire de surfzoid le 16/11/2006 16:59:44

Salut
Ta classe est vraiment nickel et 10/10, une petite question, surment de newbie, mais bon,
Pourquoi et comment il y aurait toute les publique sub en DOUBLE, comment savoir que c'est la premiere ou la deuxieme que l'on appel sachant qu'il y a les meme arguments sans surcharges ?

signaler à un administrateur
Commentaire de GabSoftware le 21/11/2006 07:59:50

les procédures avec le meme nom n'ont forcément pas la meme signature, c'est ce qui permet d'appeler toujours la bonne ... ;)

signaler à un administrateur
Commentaire de surfzoid le 21/11/2006 15:50:58

Merci de ta réponse,
la signature se fait au niveau des définition "byval" ?
Quel est la subtilité entre les deux fonctions le même nom et deux signatures différentes, par exemple :"Public Function getAttribute(ByVal path As String, ByVal nom As String, ByVal position As Integer) As String"

C'est l'équivalent d'écrire une seule fonction avec "optional position" ?

signaler à un administrateur
Commentaire de GabSoftware le 19/01/2007 23:20:22

oui, en quelque sorte, mais je ne connaissait pas optional avant...
et puis ça permet t'avoir 2 signatures de méthodes avec l'intellisense de vstudio :)

signaler à un administrateur
Commentaire de Castelroussin le 27/09/2007 18:39:55 10/10

En 2 lignes....
Ta source est vraiment superbe. Bon Travail

signaler à un administrateur
Commentaire de orothierry le 07/10/2007 12:41:01

Si tout le monde faisait des codes aussi géniaux, (Class + codes de test complet + super bien fait et compréhensible) le monde serait surement meilleur lol.

signaler à un administrateur
Commentaire de YoYoGoTT le 26/10/2007 17:53:35 8/10

Salut,
Félicitation pour cette classe. C'est la classe (désolé)
Un exemple ! Je te rajoute à ma petite liste de bons codeurs ;)
Merci
A+

signaler à un administrateur
Commentaire de GabSoftware le 29/10/2007 03:33:04

Merci beaucoup ! :D

signaler à un administrateur
Commentaire de exatex le 22/11/2007 07:31:01 8/10

Source relativement pratique.
Je dirait qu'il y a juste quelques "defaut" de presentation. Par exemple, j'aurais defini une propriété "File" pour le chemin du fichier avec une variable local de stockage nommé "_File".
De plus les Try / Catch sont un peut trop generaliste. Il faut eviter des Try qui englobe tout le code d'une procedure.

Va tu encore travailler sur cette classe?
Je vais certainement avoir a travailler du XML dans peut de temps, et il y a des chances pour que j'utilise ta class.

Bon travail tous de même, et merci de nous le faire partager.

signaler à un administrateur
Commentaire de GabSoftware le 22/11/2007 11:08:04

Je n'améliore plus cette classe actuellement, mais libre à toi de changer ce qui ne te convient pas ;)
Je travaille actuellement sur mon lecteur audio GabPlayer 2 et je n'ai plus à utiliser ma classe GabXML en raison du nouveau My.Settings de .net 2

signaler à un administrateur
Commentaire de surfzoid le 22/11/2007 15:21:07

Tu utilises directememnt le "My.Settings" ?
ou tu passe par un  :
' Get the application configuration file.
    Dim config As System.Configuration.Configuration = _
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

J'ai aussi trouvé une alternative interessante pour le raison evoquer sur le forum du lien suivant :
http://forums.microsoft.com/MSDN-FR/ShowPost.aspx?PostID=2085773&SiteID=12

signaler à un administrateur
Commentaire de BinOff le 13/12/2007 16:11:27 2/10

Bon je vois que la source plait à beaucoup de monde.

Je vais quand même t'annoncer un gros problème qui selon moi justifie la note que je te mets.

Les lignes :
Dim doc As New XmlDocument
doc.Load(fichier)

sont présente dans toutes les fonctions... à la place d'avoir un attribut doc privé à la classe.

Pourquoi ne ferais tu pas ceci :

private doc as xmlDocument 'en haut de ta classe

puis une property pour y accéder, et dans ton constructeur :

doc = New XmlDocument

(éventuellement prévoir une nouvelle fonction "save" ou "flush" qui peuvent être utile...

Actuellement si tu gardes ton source tel qu'il est, et que tu veux créer un fichier XML pour y ajouter des élements par exemple, la fonction recharge le fichier à chaque ajout d'un nouvel élement... Ca peut être très long... très très long même (plus le fichier xml grossi, plus l'ouverture sera lente)... Le correctif que je te propose te fera gagner beaucoup en performances.

Cordialement,
Pascal

signaler à un administrateur
Commentaire de GabSoftware le 13/12/2007 17:34:42

1 sur 5 ...

Comme tu y vas !

Regardes. Imagines, tu crées un logiciel, ou un bout de code, il marche bien, tout le monde l'aime bien, il a une bonne note.
Mais, je trouve un défaut. Oh bien sûr ça ne nuit pas au fonctionnement, c'est juste une optimisation et je pourrai corriger ça moi-même et te le signaler.
Si je te le signale, tu peux corriger, ainsi ton logiciel devient meilleur. Je peux donner une bonne note car ton logiciel marche bien.
Mais non, je préfère directement te mettre un 1 sur 5, sans te laisser le temps de corriger !
Note qui restera même si tu corriges ton logiciel. Note qui restera là pour toujours.

En 3 mots... Merci du cadeau!

signaler à un administrateur
Commentaire de surfzoid le 13/12/2007 19:54:13

Entierement d'accord, il y a pas mal de lourdeau qui oublit le "spirit comunity", ou viennet carement dans cette comunauté, en croyant que c'est télécharger.com ou que c'est la poudre de perlinpin miraculeuse du "dieu" bilou, arf arf arf..... :-)

signaler à un administrateur
Commentaire de tularis le 25/03/2008 14:19:21 4/10

j'approuve le commentaire de binoche, ta source est sympa, mais il faut apprendre a programmer comme de vrai développeurs maintenant, je te met 4/10 parce qu'il y a du travail comparé a la plupart des source de ce site qui ne sont ni commenté et parfois même non fonctionnel.
Tu surcharge ton code, et cela n'est toujours pas corrigés depuis 3 mois ...
Je considère que ta source est partageable et je te remercie de l'avoir affiché.

signaler à un administrateur
Commentaire de GabSoftware le 27/03/2008 03:38:44

Pour les settings en C# ils sont aussi disponibles. Je les ai déjà utilisé par exemple dans mon GabMouseColorPicker qui est écrit en C#. Simplement la programmation est un peu différente. Voici comment faire tout simplement :

1 - On définit les paramètres que l'on souhaite dans l'onglet Settings des propriétés de l'application.
2 - On rajoute la directive suivante, où MonApplicationNameSpace correspond à l'espace de nom de votre application :

      using MonApplicationNameSpace.Properties;

3 - On charge les settings manuellement au démarrage de l'application :

        private void frmMain_Load(object sender, EventArgs e)
        {
            // On charge les settings
            this.monControle.Checked = Settings.Default.monControleChecked;
            //...
        }
4 - On sauvegarde les settings à la fermeture de l'application

        private void frmMain_Closing(object sender, FormClosingEventArgs e)
        {
            Settings.Default.Save();
        }


Et voilà... tout simplement ! Il faut écrire un peu plus, mais ce n'est pas beaucoup plus compliqué que le VB. Bien que le VB soit plus sympa avec le binding automatique des propriétés des classes ! :)

signaler à un administrateur
Commentaire de passylmat le 29/06/2008 16:34:08

Vraiment très bonne source, exactement ce qu'il me fallait ! Bravo, lisible, simple à comprendre et à utiliser, vraiment parfait !! ^^

signaler à un administrateur
Commentaire de samterabyte le 24/01/2009 15:28:02 9/10

Salut Gab,
ton source est idéal pour mettre le pied à l'etrier d'un newbie comme moi de vb et du xml.
Je rencontre cependant un petit problème, je parviens sans problème à utiliser getElement ou getAttribute, mais mon fichier xml reste insensible au setElement, SetElementValue, SetAttribute !
je suis sous VB express 2008/Vista
Ais-je manqué quleque chose ?
A+

signaler à un administrateur
Commentaire de killedman le 03/04/2009 17:50:28 6/10

Salut,

C'est bien comme source :)

Le problème est  que je comprend pas comment tu fait pour créé un nouveau noeud si le fichier est de cette forme.

<Eleve nom="Kilvan" prenom="Mordak" El_Niv_Scol="6" El_Ref="1" Garde_partage="False" Num_Fiche="0">
<adresse AD_Ref="0" Desc="test" num="L5" rue="principal" Codepostal="111222" ville="Midgard" province="Champs de glace" />
<adresse AD_Ref="0" Desc="test" num="L5" rue="principal" Codepostal="111222" ville="Midgard" province="Champs de glace" />
</Eleve>


Mais bon, comme je suis plus habituer à travailler avec des BD :)

Merci pour le source ...

signaler à un administrateur
Commentaire de GabSoftware le 09/06/2009 07:54:23

La source est mise à jour et devrait résoudre la plupart des problèmes rencontrés. Il suffit de connaître la syntaxe des requêtes XPath :)

signaler à un administrateur
Commentaire de chasseurdedemon le 18/06/2009 00:33:14

bonjour,
je suis débutant en vb.net ( j'utiliser vb puis c puis c++ puis java et je veux tester le vb.net qui est de l'objet comparer a vb )

j'utilise les fonction de base pour géré les fichier xml ( merci quand même pour la source ^^ )

mais je voudrais savoir comment créer le fichier xml s'il n'existe pas sur le disque dure pour ensuite l'utiliser .

merci de ton aide.

signaler à un administrateur
Commentaire de chasseurdedemon le 18/06/2009 00:58:07

c'est bon j'ai trouver ^^
            Dim Doc As New XmlDocument
            Dim mElement As XmlElement
            mElement = Doc.CreateElement("root")
            Doc.AppendChild(mElement)
            'Creation d'une XML declaration.
            Dim xmldecl As XmlDeclaration
            xmldecl = Doc.CreateXmlDeclaration("1.0", Nothing, Nothing)
            Doc.InsertBefore(xmldecl, Doc.DocumentElement)
            Doc.Save("c:\XmlDoc.xml")


merci

signaler à un administrateur
Commentaire de PCPT le 27/06/2009 22:36:11 administrateur CS

----------------------------------------
un an de commentaires nettoyé !!!
----------------------------------------


il n'y a aucune raison de s'énerver pour si peu!!

certains "conseils" étaient lègèrements attaquant mais justifés, d'autres étaient totalement déplacés et injustifiés

essayez de ne pas trop dériver de la source par elle-même

ici c'est une zone de commentaires de SOURCE, pas un forum et encore moins une zone à trolls


il est encore plus inutile (pour rester poli) de parler d'un membre "IL" sur sa source, et plus encore d'aller carrément insulter les participants !!! peu importe ce qu'on en pense


c'est pas la fête du slip


une personne PARTAGE, on donne (ou non) son avis, ses remerciements, ses conseils, ses critiques constructives, etc... sur ce partage


pour les gueguerres, réservez-vous çà par MP

merci !

signaler à un administrateur
Commentaire de surfzoid le 27/06/2009 23:19:48

Merci PCPT
Peut tu aussi faire un tour ici s'il te plait ?
http://www.ircfr.com/codes/CRYPTAGE-AVEC-MOTS-PASSE_27760.aspx
http://www.codes-sources.com/comments/TULARIS-465059.aspx

signaler à un administrateur
Commentaire de PCPT le 27/06/2009 23:51:45 administrateur CS

je modère, je ne chasse pas...

signaler à un administrateur
Commentaire de surfzoid le 28/06/2009 00:12:24

Oki :-)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

vb.net requete XML [ par beetsy ] Bonojour everybody !Je ne sais pas comment faire une requete sur un fichier XML, pourriez vous me le dire ???Je voudrais rechercher le commentaire de XML et VB 6 : Ajouter un attribut à un noeud de l'arbre [ par kimgreg ] Bonjour, je developpe une application VB6 XML et je souhaiterais connaitre l'instruction VB qui me permet d'ajouter un attribut et sa valeur &#224; un vb.net: probleme de classe [ par The French Touch ] J'ai un probleme de classes. Je travaille depuis peu sous VB.NET et j'ai un chti probleme car j'ai fait un projet avec un namespace "programme"&nbsp;u classe et module dans vb.net ???? [ par ZOBYMASTER ] bonjour a tous,Alors j'ai un petit probleme du genre "la r&#233;f&#233;rence d'objet n'est pas d&#233;finie a une instance d'un objet" car je viens de [vb.net] Crypter Décrypter un fichier XML. [ par arnolem ] Bonjour, j'ai fais une application qui copie ma base sql dans un fichier xml, je souhaite donc crypter ce fichier pour le transporter et le d&#233;cry Lien vers un fichier xml [ par guix ] Bonjour, j'ai une application qui affiche des donn&#233;es d'apr&#232;s un fichier xml. Je cr&#233;e un objet xml qui prend en param&#232;tre le chemi Lien vers un fichier xml [ par guix ] Bonjour, j'ai une application qui affiche des donn&#233;es d'apr&#232;s un fichier xml. Je cr&#233;e un objet xml qui prend en param&#232;tre le chemi


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,125 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.