IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Classe ou tuto pour lire/ecrire des fichiers XML [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut Classe ou tuto pour lire/ecrire des fichiers XML
    Bonjour à tous,
    Je rencontre beaucoup de contrainte avec la serialization XML et je voudrais lire/ecrire les informations moi-même dans des fichiers xml.
    les informations du fichier xml devant s'organiser un peu à la maniere des fichiers INI en Section, Clé, valeur.

    N'hesitez pas aussi à donner votre avis sur les avantages et inconvenients des 2 méthodes (Serialization ou écriture XML personalisée).

    Merci beaucoup pour votre aide.

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Bonjour,

    Et bien j'ai envie de dire, que de traiter le fichier "à la main", c'est finalement le traiter "en dur".
    Si tu as des changements, il faudra changer l'écriture et la lecture. Ça sera surement une perte de temps.

    Donc la sérialization évite cela... tu ne t'occupes que de ta classe. Il y a quelques contraintes de typage des données, mais on peut les contourner.

    Quels problèmes rencontres tu avec la sérialization?
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Membre actif
    Homme Profil pro
    Developpeur
    Inscrit en
    Février 2013
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2013
    Messages : 180
    Points : 271
    Points
    271
    Par défaut
    j'aurais une question : que veux tu sérialiser, pour quel raison ?
    il y a peut être des solution plus adapté suivant ton cas.

    ensuite si tu veux de l'aide pour le xml fourni moi l'architecture en nœud auquel tu as pensé

    ps : personnellement quand j'ai besoin d'une sauvegarde simple en clé / valeur j'utilise l'app.config
    <appSettings>
    <add key="ReportBancPath" value="\Ressource\SQLreport\Report_PSB_Banc.rdl"/>

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Bonjour et merci pour votre aide,
    En réalité j'ai déja commencé à ecrire ma classe (voir mon Post ci-dessous) :
    http://www.developpez.net/forums/d14...-serializable/

    J'arrive à serializer de facon organisée toute les données utiles mais j'ai oublié de traiter les listes que j'appelle xxxxIndex (of string) et qui me servent à retrouver une clé ou une section rapidement. Donc en clair pour que mon objet soit valide lors de la restauration je dois aussi restaurer ces listes qui pour moi sont de la pomplerie interne et ne devrait pas être considérées comme données persistentes faisant partie du XML.
    Sinon pour l'architecture du XML , voilà ce à quoi j'ai pensé :

    Section1
    Clé1=valeur
    Clé2=Valeur
    Section2
    Clé1=Valeur
    Clé2=Valeur
    ......

    @Ranzoken: j'ai aussi pensé à l'app.config mais j'aimerais pouvoir ecrire dans plusieurs fichiers xml que je nomme moi-même.

  5. #5
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Pour info tu peux personnaliser la serialization XML pour une classe en implémentant l'interface IXmlSerializable.

  6. #6
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Bah du coup je comprends pas :

    je dois aussi restaurer ces listes qui pour moi sont de la pomplerie interne et ne devrait pas être considérées comme données persistentes faisant partie du XML.
    Tu veux sérializer ces listes ou pas ?
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Bonjour et merci de me répondre mactwist69,
    Dans ma classe il y a des listes que je doit serializer puisqu'elles contiennent les données qui doivent persister et donc être enregistrées dans le fichier xml. D'autres listes ne servent qu'au fonctionnement interne de la classe, elles n'ont rien à faire dans le fixhier xml, je dois donc trouver un moyen de restaurer ces listes afin que mon objet se retrouve dans un etat valide une fois deserializé.

    La serialization est peut-être un moyen pratique de persister des données mais personnellement je trouve que ça apporte beaucoup de contrainte puisque la classe doit être prévu pour au départ et que l'on ne peux pas serializer n'importe quel type de listes, c'est pourquoi je voudrais explorer un autre moyen comme la lecture/écriture du fichier xml sans passer par la serialization. Aprés je ne dit pas que c'est une bonne idée mais j'essaye de voir qu'elle est le moyen le plus simple et qui pourrait sadapter à d'autres classes éventuellements. J'envisage même de revenir au fichier INI puisque je possede une classe qui fonctionne trés bien pour ça.

    Vos avis ou suggestions m'interresse beaucoup.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    La mise en oeuvre utilisée dans ta discussion précédante me semble compliqué.

    Et si tu faisais ainsi

    Le fichier xml
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    '<?xml version="1.0" encoding="UTF-8"?>
    <setupsys>
        <section section_name="section J" >
            <cle cle_name="cle1" pas="2" max="99" min="5" />
            <cle cle_name="cle2" pas="3" max="55" min="11" />
            <cle cle_name="cle3" pas="4" max="54" min="12" />
       </section>
       <section section_name="section H" >
            <cle cle_name="cle1" pas="3" max="99" min="5" />
            <cle cle_name="cle2" pas="2" max="55" min="11" />
       </section>
    </setupsys>

    Les classes correspondantes avec la propriété d'accés par élément section/cle (j'ai fait une "function", cela me semble plus judicieux, a moins que plus tard tu veuilles mettre à jour. Le principe reste le même pour une propriété, le code serait dans le get.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Imports System.Xml.Serialization
     
    <XmlRoot("setupsys")>
    Public Class SetupSys
        ''' <summary>Les sections.</summary>
        <XmlElement("section")>
        Public Property Section As New List(Of Section)
     
        ''' <summary>Donne un objet de type cle en fonction d'une section et d'une cle.</summary>
        ''' <param name="SectionName">Le nom de la section</param>
        ''' <param name="KeyName">Le nom de la clé</param>
        ''' <returns>Un objet de type cle</returns>
        Public Function Item(ByVal SectionName As String, KeyName As String) As Cle
            For Each sec In Me.Section
                If sec.Section_name = SectionName Then
                    For Each cle As Cle In sec.Cle
                        If cle.Cle_name = KeyName Then
                            Return cle
                        End If
                    Next
                End If
            Next
            Throw New Exception(String.Format("Section/clé introuvable"))
            Return Nothing
        End Function
     
    End Class
     
    Public Class Section
        ''' <summary>Le nom de la section.</summary>
        <XmlAttribute("section_name")>
        Public Property Section_name As String = ""
        ''' <summary>Les clés.</summary>
        <XmlElement("cle")>
        Public Property Cle As New List(Of Cle)
    End Class
     
    Public Class Cle
        ''' <summary>Le nom de la clé.</summary>
        <XmlAttribute("cle_name")>
        Public Property Cle_name As String = ""
        ''' <summary>Le maximum.</summary>
        <XmlAttribute("max")>
        Public Property Max As Integer = 0
        ''' <summary>Le minimum.</summary>
        <XmlAttribute("min")>
        Public Property Min As Integer = 0
        ''' <summary>Le pas.</summary>
        <XmlAttribute("pas")>
        Public Property pas As Integer = 0
    End Class
    La lecture du fichier xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        ''' <summary>Lecture du fichier XML setupsys ; alimente les classes correspondantes</summary>
        ''' <param name="filename">Le nom du fichier</param>
        ''' <returns>Une instance de la classe setupsys contenant les données du fichier.</returns>
        Private Function LitDataXMLSetupSys(ByVal filename As String) As SetupSys
            Try
                Using objStreamReader As New IO.StreamReader(filename)
                    Try
                        Return DirectCast((New Xml.Serialization.XmlSerializer(GetType(SetupSys))).Deserialize(objStreamReader), SetupSys)
                    Catch ex As Exception
                        MessageBox.Show("Echec de la lecture." & ex.Message)
                    Finally
                        objStreamReader.Close()
                    End Try
                End Using
            Catch ex As Exception
                MsgBox("Fichier inaccessible." & ex.Message)
            End Try
            Return Nothing
        End Function
    Accés aux données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim Data As SetupSys = LitDataXMLSetupSys("d:\data\fichier XML\Setupsys.xml")
     
            MessageBox.Show(Data.Item("section J", "cle3").Max)
            MessageBox.Show(Data.Item("section J", "cle3").pas)
    Seule les info utiles sont présentent et sérialisées.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Le mieux c'est que tu sérialises ta classe et tu ajoutes l'attribut XmlIgnore pour les listes que tu ne veux pas sérialiser.

  10. #10
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Merci beaucoup à vous tous et surtout rv26t,
    lu vite fait en travers car je ne suis pas devant mon PV mais ca ressemble beaucoup à ce que je souhaite faire.
    Je testerais ce soir l'execution de ce code en tout cas merci beaucoup pour tes efforts, c'est super sympa.

  11. #11
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Encore merci rv26t,
    Cette fois j'ai testé l’exécution, ça fonctionne exactement comme je voulais avec un code qui 'a l'air très simple, facile à maintenir et de plus très efficace.
    Je crois que sans vous j'aurais galéré plusieurs jours et je n'aurais certainement pas pu faire un code aussi concis, donc merci beaucoup.
    Je passe en résolu.

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Afin de compléter un peu, voici quelques fonctionnalités supplémentaires

    L'ajout de section/cle ou de cle (pour une section qui existe)

    Pour simpifier l'ajout dans la "section", un constructeur avec param sur la classe "cle" (sinon il faudrait détailler par prop.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Class Cle
        Private Sub New()
        End Sub
        ''' <summary>Cré une nouvelle instance de clé avec les valeurs des paramètres.</summary>
        ''' <param name="NomCle">La clé</param>
        ''' <param name="ValMin">Le minimum</param>
        ''' <param name="ValMax">Le maximum</param>
        ''' <param name="ValPas">Le pas</param>
        ''' <remarks></remarks>
        Sub New(NomCle As String, ValMin As Integer, ValMax As Integer, ValPas As Integer)
            Cle_name = NomCle
            Min = ValMin
            Max = ValMax
            pas = ValPas
        End Sub
    La méthode ajout (Add pour garder le principe des collections) dans la classe "SetupSys"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
        ''' <summary>Ajoute une section et une clé ; si la section existe, rajoute la clé.</summary>
        ''' <param name="SectionName">La section</param>
        ''' <param name="KeyName">La clé</param>
        ''' <param name="ValMin">Le minimum</param>
        ''' <param name="ValMax">Le maximum</param>
        ''' <param name="ValPas">Le pas</param>
        ''' <remarks>Génére une erreur en cas de section/clé existant.</remarks>
        Public Sub Add(ByVal SectionName As String, KeyName As String, ValMin As Integer, ValMax As Integer, ValPas As Integer)
            ' recherche si existe
            For Each sec In Me.Section
                If sec.Section_name = SectionName Then
                    For Each cle As Cle In sec.Cle
                        If cle.Cle_name = KeyName Then Throw New Exception("Section/cle existant.") ' la section/clé existe déjà
                    Next
                    ' ajoute la clé à la section existante
                    sec.Cle.Add(New Cle(KeyName, ValMin, ValMax, ValPas))
                    Exit Sub
                End If
            Next
            ' Section non trouvée : ajoute la section et la clé
            Dim NewSec As Section = New Section
            NewSec.Section_name = SectionName
            NewSec.Cle.Add(New Cle(KeyName, ValMin, ValMax, ValPas))
            Me.Section.Add(NewSec)
        End Sub
    Code des classes complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    Imports System.Xml.Serialization
     
    <XmlRoot("setupsys")>
    Public Class SetupSys
        ''' <summary>Les sections.</summary>
        <XmlElement("section")>
        Public Property Section As New List(Of Section)
     
        ''' <summary>Donne une valeur en fonction de sa section et de sa cle.</summary>
        ''' <param name="SectionName">Le nom de la section</param>
        ''' <param name="KeyName">Le nom de la clé</param>
        ''' <returns>Un objet de type cle</returns>
        Public Function Item(ByVal SectionName As String, KeyName As String) As Cle
            For Each sec In Me.Section
                If sec.Section_name = SectionName Then
                    For Each cle As Cle In sec.Cle
                        If cle.Cle_name = KeyName Then
                            Return cle
                        End If
                    Next
                End If
            Next
            Throw New Exception(String.Format("Section/clé introuvable"))
        End Function
     
        ''' <summary>Ajoute une section et une clé ; si la section existe, rajoute la clé.</summary>
        ''' <param name="SectionName">La section</param>
        ''' <param name="KeyName">La clé</param>
        ''' <param name="ValMin">Le minimum</param>
        ''' <param name="ValMax">Le maximum</param>
        ''' <param name="ValPas">Le pas</param>
        ''' <remarks>Génére une erreur en cas de section/clé existant.</remarks>
        Public Sub Add(ByVal SectionName As String, KeyName As String, ValMin As Integer, ValMax As Integer, ValPas As Integer)
            ' recherche si existe
            For Each sec In Me.Section
                If sec.Section_name = SectionName Then
                    For Each cle As Cle In sec.Cle
                        If cle.Cle_name = KeyName Then Throw New Exception("Section/cle existant.") ' la section/clé existe déjà
                    Next
                    ' ajoute la clé à la section existante
                    sec.Cle.Add(New Cle(KeyName, ValMin, ValMax, ValPas))
                    Exit Sub
                End If
            Next
            ' Section non trouvée : ajoute la section et la clé
            Dim NewSec As Section = New Section
            NewSec.Section_name = SectionName
            NewSec.Cle.Add(New Cle(KeyName, ValMin, ValMax, ValPas))
            Me.Section.Add(NewSec)
        End Sub
     
    End Class
     
    Public Class Section
        ''' <summary>Le nom de la section.</summary>
        <XmlAttribute("section_name")>
        Public Property Section_name As String = ""
        ''' <summary>Les clés.</summary>
        <XmlElement("cle")>
        Public Property Cle As New List(Of Cle)
    End Class
     
    Public Class Cle
        Private Sub New()
        End Sub
        ''' <summary>Cré une nouvelle instance de clé avec les valeurs des paramètres.</summary>
        ''' <param name="NomCle">La clé</param>
        ''' <param name="ValMin">Le minimum</param>
        ''' <param name="ValMax">Le maximum</param>
        ''' <param name="ValPas">Le pas</param>
        ''' <remarks></remarks>
        Sub New(NomCle As String, ValMin As Integer, ValMax As Integer, ValPas As Integer)
            Cle_name = NomCle
            Min = ValMin
            Max = ValMax
            pas = ValPas
        End Sub
     
        ''' <summary>Le nom de la clé.</summary>
        <XmlAttribute("cle_name")>
        Public Property Cle_name As String = ""
        ''' <summary>Le minimum.</summary>
        <XmlAttribute("min")>
        Public Property Min As Integer = 0
        ''' <summary>Le maximum.</summary>
        <XmlAttribute("max")>
        Public Property Max As Integer = 0
        ''' <summary>Le pas.</summary>
        <XmlAttribute("pas")>
        Public Property pas As Integer = 0
    End Class
    Note : j'ai remis les propriétés de la classe "cle" dans l'ordre, cela est plus parlant dans le fichier xml si on le visualise


    La méthode de sauvegarde du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        ''' <summary>Ecriture du fichier XML setupsys</summary>
        ''' <param name="filename">Le nom du fichier</param>
        ''' <param name="Setup">L'instance de la classe setupsys contenant les données à sauvegarder dans le fichier XML</param>
        Private Sub EcritDataXMLSetupSys(ByVal filename As String, Setup As SetupSys)
            Try
                Using objStreamWriter As StreamWriter = New StreamWriter(filename)
                    Try
                        Dim xsSetup As New Xml.Serialization.XmlSerializer(GetType(SetupSys), New Xml.Serialization.XmlRootAttribute("setupsys"))
                        xsSetup.Serialize(objStreamWriter, Setup)
                    Catch ex As Exception
                        MessageBox.Show("Echec de l'écriture." & ex.Message)
                    End Try
                End Using
            Catch ex As Exception
            End Try
        End Sub
    Un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            Dim Data As SetupSys = LitDataXMLSetupSys("d:\data\fichier XML\Setupsys.xml")
            Data.Add("section J", "cle4", 1, 100, 10) ' ajout clé
            Data.Add("section K", "cle1", 20, 40, 2) ' ajout section/clé
            Try
                Data.Add("section J", "cle3", 1, 100, 10) 'existe >> erreur (avec mon fichier d'exemple)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            EcritDataXMLSetupSys("d:\data\fichier XML\savesetup.xml", Data) 'sauve sous un nouveau nom (pratique pour test sur un ficier propre)
     
            'vérif sur le nouveau fichier
            Data = LitDataXMLSetupSys("d:\data\fichier XML\savesetup.xml")
            Dim cl As Cle = Data.Item("section J", "cle4")
            MessageBox.Show(String.Format("Min : {0} ; Max {1} ; Pas {2}", cl.Min, cl.Max, cl.pas))
    Après on peut aussi rajouter une méthode "Add" surchargé dans la classe "SetupSys" pour ajouter une "section" et une instance de "cle"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Sub Add(ByVal SectionName As String, UneCle As Cle)
        ' ...
    Le principe est le même, coté dev cette méthode nécessite plus de code, mais cela laisse plus de flexibilité.
    Etc ...
    A voir suivant les besoins

    Voila pour les quelques compléments de cet exemple.
    Bon code
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    La méthode Add avec une instance de cle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        ''' <summary>Ajoute une section et une clé ; si la section existe, rajoute la clé.</summary>
        ''' <param name="SectionName">La section</param>
        ''' <param name="cl">Une instance de clé</param>
        ''' <remarks>Génére une erreur en cas de section/clé existant.</remarks>
        Public Sub Add(ByVal SectionName As String, cl As Cle)
            ' recherche si existe
            For Each sec In Me.Section
                If sec.Section_name = SectionName Then
                    For Each sc As Cle In sec.Cle
                        If sc.Cle_name = cl.Cle_name Then Throw New Exception("Section/cle existant.") ' la section/clé existe déjà
                    Next
                    sec.Cle.Add(cl)  ' ajoute la clé à la section existante
                    Exit Sub
                End If
            Next
            ' Section non trouvée : ajoute la section et la clé
            Dim NewSec As Section = New Section
            NewSec.Section_name = SectionName
            NewSec.Cle.Add(cl)
            Me.Section.Add(NewSec)
        End Sub
    Légèrement plus clair en utilisant l'instance de cle

    du coup la méthode Add avec tous les paramètres devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        ''' <summary>Ajoute une section et une clé ; si la section existe, rajoute la clé.</summary>
        ''' <param name="SectionName">La section</param>
        ''' <param name="KeyName">La clé</param>
        ''' <param name="ValMin">Le minimum</param>
        ''' <param name="ValMax">Le maximum</param>
        ''' <param name="ValPas">Le pas</param>
        ''' <remarks>Laisse remonter l'erreur en cas de section/clé existant.</remarks>
        Public Sub Add(ByVal SectionName As String, KeyName As String, ValMin As Integer, ValMax As Integer, ValPas As Integer)
            Add(SectionName, New Cle(KeyName, ValMin, ValMax, ValPas))
        End Sub
    Elle construit juste l'instance de cle dans l'appel de la méthode "Add avec une instance de cle en param"
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  14. #14
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Merci rv26t, c'est vraiment super d'avoir codé tout ça. Avec l'ajout de clé et l'enregistrement cela en fait une classe compléte que je pourrais réutiliser....
    Maintenant j'ai tout ce qu'il faut pour m'attaquer au reste de mon programme. merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion par ftp pour aller placer des fichiers .xml
    Par duvelmoi9 dans le forum Connexions aux bases de données
    Réponses: 1
    Dernier message: 30/12/2010, 02h08
  2. lire ecrire un fichier xml en js
    Par mimilemoose dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/02/2010, 11h34
  3. [SP-2007] Custom Field pour lire dans un fichier XML
    Par kilkikou dans le forum SharePoint
    Réponses: 6
    Dernier message: 19/08/2009, 09h33
  4. [Free Pascal] Ecrire des fichiers XML
    Par M.Dlb dans le forum Free Pascal
    Réponses: 2
    Dernier message: 27/09/2007, 07h09
  5. [VC++] creer, ecrire et lire dans des fichiers .ini
    Par ksoft dans le forum Visual C++
    Réponses: 11
    Dernier message: 06/09/2006, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo