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 :

Choix de l'outils de gestion d'un fichier XML


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut Choix de l'outils de gestion d'un fichier XML
    Bonjour,

    Actuellement pour configurer les données de notre logiciel nous avons un fichier de classe.
    Ce dernier contient une partie lier à la création du fichier, la version etc..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #-------------------------------------------------------------------------------
    #Author         : Moi
    #Company        : Notre companie
    #Description    : Descriptors of the object types managed by the supervision.
    #                 Used to build the Configuration data base.
    #Release Info   : $Archive: /classes.txt $
    #                 $Revision:2 $
    #                 $Date: 2010/02/03 9:53 $
    #-------------------------------------------------------------------------------
    $Compliance = 3.00
    #-------------------------------------------------------------------------------
    Et une autre partie qui contient les données.

    C'est données sont classées en 3 groupes.
    le 1er c'est le nom de l'objet, suivi d'un descriptif, ensuite se sont les commandes pour lire et écrire les données dans notre supervision (automate)

    Ensuite les données que contient l'objet. En 2 groupes, Data et Configuration. Il se peut d'un objet n'est que Data ou que Configuration, ou les 2 comme le court exemple ci dessous.

    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
    #-------------------------------------------------------------------------------
    ObjDesc = Al, Alarm, RDT, WDT, RCG, WCG
     
    DataAtt = Al, Active, Active, -1, Enum, 0:False/1:True
    DataAtt = Al, Raised, Raised, -1, Enum, 0:False/1:True
    DataAtt = Al, ACKable, Alarm can be acknowledged (Write 0 to acknowledge), 1, Enum, 0:False/1:True
     
    CfgAtt = Al, Level, Severity level, 2, Enum, 0:URGENT/1:NON URGENT/2:INFORMATIVE/3:HIDDEN/4:NOT MANAGED
    CfgAtt = Al, Label, Label, 2, String, 10
     
    #-------------------------------------------------------------------------------
    ObjDesc = AG, Group of alarms (up to 32), RDT, WDT, RCG, WFG
     
    DataAt = AG, Active, Bitfield of active alarms, -1, Enum, 0:False/1:True
    DataAt = AG, ACKable, Bitfield of alarms can be acknowledged (Write 0 to acknowledge), 1, Enum, 0:False/1:True
     
    CfgAtt = AG, Level, Severity level, 2, Enum, 0:URGENT/1:NON URGENT/2:INFORMATIVE/3:HIDDEN/4:NOT MANAGED
    CfgAtt = AG, Label, Label, 2, String, 8
    CfgAtt = AG, DelayUnit, Delay unit, 2, Enum, 0:Seconds/1:Minutes
     
    #-------------------------------------------------------------------------------
    Notre logiciel se configure donc à la lecture de ce fichier.

    Dans le cadre de l’évolution de nos logiciels vers le .net, j'aurais aimer basculer ce fichier vers de l'XML.
    Quelque chose qui ressemblerai à cela:

    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    <CONF>
    	<produit>MonProduit</produit>
    	<author>Moi</author>
    	<descript>Decriptor of Object ... </descript>
    	<releaseinfo> ...........</releaseinfo>
    	<rev>1.0.1</rev>
    	<date>2014/05/20 13:51</date>
    	<compliance>3.0<compliance>
    </CONF>
    <OBJ>
    	<desc name = Al >
    		<name>Alarm</name>
    		<readdat>RDT</readdat>
    		<recdat>WDT</recdat>
    		<readconf>RCG</readconf>
    		<recconf>WCG</recconf>
    		<data>
    			<dt name = active>
    				<desc>Active</desc>
    				<niv>0</niv>
    				<type>ENUM</type>
    				<info>0:False/1:True</info>
    				<classe>3.0</classe>
    				<tpclas>1</tpclas>
    			</dt>
    			<dt name = Raised>
    				<desc>Raised</desc>
    				<niv>-1</niv>
    				<type>ENUM</type>
    				<info>0:False/1:True</info>
    				<classe>3.0</classe>
    				<tpclas>1</tpclas>
    			</dt>
    			<dt name = ACKable>
    				<desc>Alarm can be acknowledged (Write 0 to acknowledge)</desc>
    				<niv>-1</niv>
    				<type>ENUM</type>
    				<info>0:False/1:True</info>
    				<classe>3.0</classe>
    				<tpclas>1</tpclas>
    			</dt>
    		</data>
    		<cfg>
    			<dt name = Level>
    				<desc>Severity level</desc>
    				<niv>2</niv>
    				<type>ENUM</type>
    				<info>0:URGENT/1:NON URGENT/2:INFORMATIVE/3:HIDDEN/4:NOT MANAGED</info>
    				<classe>3.0</classe>
    				<tpclas>1</tpclas>
    			</dt>
    			<dt name = Label>
    				<desc>Label</desc>
    				<niv>2</niv>
    				<type>String</type>
    				<info></info>
    				<classe>3.0</classe>
    				<tpclas>1</tpclas>
    			</dt>
    		</cfg>
     
    	</desc>
    	<desc name = AG>
    		<name>Group of alarms (up to 32)</name>
    		<readdat>RDT</readdat>
    		<recdat>WDT</recdat>
    		<readconf>RCG</readconf>
    		<recconf>WCG</recconf>
    		<data>
    			<dt name = active>
    				<desc>Bitfield of active alarms</desc>
    				<niv>-1</niv>
    				<type>ENUM</type>
    				<info>0:False/1:True</info>
    				<classe>3.0</classe>
    				<tpclas>1</tpclas>
    			</dt>
    			<dt name = ACKable>
    				<desc>Bitfield of alarms can be acknowledged (Write 0 to acknowledge)</desc>
    				<niv>-1</niv>
    				<type>ENUM</type>
    				<info>0:False/1:True</info>
    				<classe>3.0</classe>
    				<tpclas>1</tpclas>
    			</dt>
    		</data>
    		<cfg>
    			<dt name = Level>
    				<desc>Severity level</desc>
    				<niv>2</niv>
    				<type>ENUM</type>
    				<info>0:URGENT/1:NON URGENT/2:INFORMATIVE/3:HIDDEN/4:NOT MANAGED</info>
    				<classe>3.0</classe>
    				<tpclas>1</tpclas>
    			</dt>
    			<dt name = Label>
    				<desc>Label</desc>
    				<niv>2</niv>
    				<type>String</type>
    				<info></info>
    				<classe>3.0</classe>
    				<tpclas>1</tpclas>
    			</dt>
    		</cfg>
    	</desc>
    </OBJ>

    J'ai ajouté aux fichiers d'origine <classe> et le <tpclas> Pour gérer à partir de quelle classe on utilise cette attribut. Par exemple à partir de cette classe on peut l'utilisé, ou jusqu’à cette classe, ou cette classe uniquement etc.. la n'est pas le souci.

    Dans tout les cas chaque objet aura donc les même informations pour chaque attribut, mais la quantité de données varie complètement ainsi que le nom de chaque attributs par exemple l'attribut "Label" on le retrouve régulièrement mais d'autre sont différents.


    Je deja travaillé un peu avec du XML avec XMLDocument, XPATH. Mais j'arrive pas à voir pour ce genre de document comment le gérer. J'aurai un accès en lecture principalement mais aussi en écriture pour ajouter des attributs suivant l'automate en face lors des mise à jour par exemple.

    Déjà au niveau code je pensais faire une gestion de ces données dans des classes sérialisable stockées dans des collections ou dictionnaire. Une collection pour la configuration et une pour les data.


    Pourquoi j'ai décidé de basculer sur du XML? Dans l'avenir ont souhaiterais faire un serveur WEB qui utilise ce fichier. Le serveur Web (php ou autre) se substituant à nos logiciels actuel en grande parti. Afin qu'une les fonctionnalités courante soit accessible depuis n'importe quel navigateur ou OS.

    Je ne sais pas si le XML est le meilleur choix et si le brouillon que j'ai laissé au dessus est exploitable facilement.

  2. #2
    Membre Expert 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 : 41
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut réponse
    Bonjour,

    Oui le XML semble très adapté à ce genre de situation. Mais dans l'approche du XML, je le ferai autrement.

    Tu as créer ton document XML, tu souhaites maintenant "à la main" écrire, et lire avec XPath, mais ceci est laborieux, si je puis me permettre.

    Pour ma part, je gagne beaucoup de temps avec une autre approche:

    - Je ne créer plus moi même le document XML, je créer une classe avec l'option Serializable.
    (Pour les élements multiples, il suffit de créer des variables de classes de type List(Of )

    Une fois que ta classe contient toutes les propriétés qui correspondent à ton document. Tu n'as plus qu'à: instancier un objet de cette classe, la remplir, et utiliser la méthode Serialize, pour créer ton document XML.

    Pour le chargé, tu utilises Deserialize.

    Du coup, dans ton code, tu ne fais RIEN directement sur le XML, c'est transparent.
    Et tu ne travail qu'avec l'objet du type de ta classe.

    JE ne sais pas si je suis très claire.

  3. #3
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Bonjour,

    Merci beaucoup d'avoir répondu.

    Si si c'est relativement clair, j'ai deja utilisé cette fonction mais pour des classes sérialisable simple, il n'y avait pas de liste. Je vais essayer de tourner autour de ce que j'ai deja utiliser.

    Pour le XML que j'ai effectué c'est juste un brouillon à la main, mais je passerais par le logiciel. Notre fichier classe contient plus de 50 objets et chaque objet a entre 5 et 30 attributs. Je vais automatisé tous sa une fois que j'aurai ma base pour faire et lire le XML.


    Dans ce que j'avais fait j'avais donc une classe contenant uniquement des variables simple, integer, string, float etc...

    Est-ce que c'est possible de contenir une collection ou dico contenant lui même une classe serialisable.

    par exemple, supposition.

    Une classe serialisable Attribut pour contenir les données de:

    String -> Descriptor '<desc>Active</desc>
    Integer -> Niveau '<niv>0</niv>
    String -> Type '<type>ENUM</type>
    String -> Info '<info>0:False/1:True</info>
    String -> Classe '<classe>3.0</classe>
    Integer -> TypClass '<tpclas>1</tpclas>

    cette classe je la stock dans un dico avec comme key le nom de l'attribut ici active ' <dt name = active>
    et l’élément contenu la classe Attribut associer

    Je stocke le tout dans 2 dico l'un pour les Data l'autre pour la Configuration. DicoData et DicoConf


    Voila pour les attribut des objets
    ------------------------------------------------

    Et pour les objets une classe serialisable OBJ qui contient:


    String -> Name '<name>Alarm</name>
    String -> ReadDAT '<readdat>RDT</readdat>
    String -> RecDAT '<recdat>WDT</recdat>
    String -> ReadCONF '<readconf>RCG</readconf>
    String -> RecCONF '<recconf>WCG</recconf>
    Dico -> DicData
    Dico -> DicConf



    Les classes OBJ serait stocker dans un nouveau Dico avec comme Key le nom de l'objet '<desc name = Al >

    J’aime bien les dico mais est-ce bien adapté à la sérialisation.

    Une petit exemple de code pour ces classes:

    Classe clsOBJ
    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
    Public Class clsObject
        Private _Name As String
        Private _ReadDAT As String
        Private _RecDAT As String
        Private _ReadCFG As String
        Private _RecCFG As String
        Private _DicoData As Dictionary(Of String, clsAttribut)
        Private _DicoCfg As Dictionary(Of String, clsAttribut)
     
     
        Public Sub New()
            _Name = ""
            _ReadDAT = ""
            _RecDAT = ""
            _ReadCFG = ""
            _RecCFG = ""
            _DicoData = New Dictionary(Of String, clsAttribut)
            _DicoCfg = New Dictionary(Of String, clsAttribut)
        End Sub
     
        Public Property Name() As String
            Get
                Name = _Name
            End Get
            Set(ByVal value As String)
                _Name = value
            End Set
        End Property
        Public Property ReadDAT() As String
            Get
                ReadDAT = _ReadDAT
            End Get
            Set(ByVal value As String)
                _ReadDAT = value
            End Set
        End Property
        Public Property ReadCFG() As String
            Get
                ReadCFG = _ReadCFG
            End Get
            Set(ByVal value As String)
                _ReadCFG = value
            End Set
        End Property
        Public Property RecDAT() As String
            Get
                RecDAT = _RecDAT
            End Get
            Set(ByVal value As String)
                _RecDAT = value
            End Set
        End Property
        Public Property RecCFG() As String
            Get
                RecCFG = _RecCFG
            End Get
            Set(ByVal value As String)
                _RecCFG = value
            End Set
        End Property
        Public Property DicoData() As Dictionary(Of String, clsAttribut)
            Get
                DicoData = _DicoData
            End Get
            Set(ByVal value As Dictionary(Of String, clsAttribut))
                _DicoData = value
            End Set
        End Property
        Public Property DicoCfg() As Dictionary(Of String, clsAttribut)
            Get
                DicoCfg = _DicoCfg
            End Get
            Set(ByVal value As Dictionary(Of String, clsAttribut))
                _DicoCfg = value
            End Set
        End Property
     
    End Class
    Classe Attribut
    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
    Public Class clsAttribut
        Private _Descriptor As String
        Private _Niveau As Integer
        Private _Type As String
        Private _Info As String
        Private _Classe As String
        Private _TypClass As Integer
     
        Public Sub New()
            _Descriptor = ""
            _Niveau = -1
            _Type = ""
            _Info = ""
            _Classe = ""
            _TypClass = 0
        End Sub
     
        Public Property Descriptor() As String
            Get
                Descriptor = _Descriptor
            End Get
            Set(ByVal value As String)
                _Descriptor = value
            End Set
        End Property
        Public Property Niveau() As Integer
            Get
                Niveau = _Niveau
            End Get
            Set(ByVal value As Integer)
                _Niveau = value
            End Set
        End Property
        Public Property Type() As String
            Get
                Type = _Type
            End Get
            Set(ByVal value As String)
                _Type = value
            End Set
        End Property
        Public Property Info() As String
            Get
                Info = _Info
            End Get
            Set(ByVal value As String)
                _Info = value
            End Set
        End Property
        Public Property Classe() As String
            Get
                Classe = _Classe
            End Get
            Set(ByVal value As String)
                _Classe = value
            End Set
        End Property
        Public Property TypClass() As Integer
            Get
                TypClass = _TypClass
            End Get
            Set(ByVal value As Integer)
                _TypClass = value
            End Set
        End Property
     
    End Class
    Pour la gestion des Dico il faut que je change car la cela fonctionne pas correctement mais c'est pour montrer le principe.

  4. #4
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Bonjour,

    J'ai réussi.

    Après avoir compris qu'il fallait que j'imbrique mes classes les une dans les autres pour avoir au final mon architecture complète dans une seul classe, cela roule.

    j'ai donc une classe clsAttribut qui contient tout mes attributs de chaque objet que se soit pour la configuration ou pour les datas.

    clsAttribut
    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
    Public Class clsAttribut
        Private _Nom As String
        Private _Descriptor As String
        Private _Niveau As Integer
        Private _Type As String
        Private _Info As String
        Private _Classe As String
        Private _TypClass As Integer
     
        Public Sub New()
            _Nom = ""
            _Descriptor = ""
            _Niveau = -1
            _Type = ""
            _Info = ""
            _Classe = ""
            _TypClass = 0
        End Sub
     
        Public Property Nom() As String
            Get
                Nom = _Nom
            End Get
            Set(ByVal value As String)
                _Nom = value
            End Set
        End Property
     
        Public Property Descriptor() As String
            Get
                Descriptor = _Descriptor
            End Get
            Set(ByVal value As String)
                _Descriptor = value
            End Set
        End Property
        Public Property Niveau() As Integer
            Get
                Niveau = _Niveau
            End Get
            Set(ByVal value As Integer)
                _Niveau = value
            End Set
        End Property
        Public Property Type() As String
            Get
                Type = _Type
            End Get
            Set(ByVal value As String)
                _Type = value
            End Set
        End Property
        Public Property Info() As String
            Get
                Info = _Info
            End Get
            Set(ByVal value As String)
                _Info = value
            End Set
        End Property
        Public Property Classe() As String
            Get
                Classe = _Classe
            End Get
            Set(ByVal value As String)
                _Classe = value
            End Set
        End Property
        Public Property TypClass() As Integer
            Get
                TypClass = _TypClass
            End Get
            Set(ByVal value As Integer)
                _TypClass = value
            End Set
        End Property
     
    End Class



    Ensuite une classe clsObjet qui contient le nom de l'objet, mes données de lecture et écriture de la configuration ou data, Ainsi que la liste des attributs des data et config.

    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
    Public Class clsObject
        Private _Name As String
        Private _ReadDAT As String
        Private _RecDAT As String
        Private _ReadCFG As String
        Private _RecCFG As String
        Private _DicoData As List(Of clsAttribut)
        Private _DicoCfg As List(Of clsAttribut)
     
     
        Public Sub New()
            _Name = ""
            _ReadDAT = ""
            _RecDAT = ""
            _ReadCFG = ""
            _RecCFG = ""
            _DicoData = New List(Of clsAttribut)
            _DicoCfg = New List(Of clsAttribut)
        End Sub
     
        Public Property Name() As String
            Get
                Name = _Name
            End Get
            Set(ByVal value As String)
                _Name = value
            End Set
        End Property
        Public Property ReadDAT() As String
            Get
                ReadDAT = _ReadDAT
            End Get
            Set(ByVal value As String)
                _ReadDAT = value
            End Set
        End Property
        Public Property ReadCFG() As String
            Get
                ReadCFG = _ReadCFG
            End Get
            Set(ByVal value As String)
                _ReadCFG = value
            End Set
        End Property
        Public Property RecDAT() As String
            Get
                RecDAT = _RecDAT
            End Get
            Set(ByVal value As String)
                _RecDAT = value
            End Set
        End Property
        Public Property RecCFG() As String
            Get
                RecCFG = _RecCFG
            End Get
            Set(ByVal value As String)
                _RecCFG = value
            End Set
        End Property
        Public Property DicoData() As List(Of clsAttribut)
            Get
                DicoData = _DicoData
            End Get
            Set(ByVal value As List(Of clsAttribut))
                _DicoData = value
            End Set
        End Property
        Public Property DicoCfg() As List(Of clsAttribut)
            Get
                DicoCfg = _DicoCfg
            End Get
            Set(ByVal value As List(Of clsAttribut))
                _DicoCfg = value
            End Set
        End Property
     
    End Class

    Ensuite j'ai une clsClassesHome qui contient l’entête avec le nom du créateur, la version, la description, enfin bref tout l’entête du fichier XML. Plus les Objets.

    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
    Public Class clsClassesHome
        Private _Nom As String
        Private _Descriptor As String
        Private _Version As String
        Private _Objet As List(Of clsObject)
     
        Public Sub New()
            _Nom = ""
            _Descriptor = ""
            _Version = ""
            _Objet = New List(Of clsObject)
        End Sub
     
        Public Property Nom() As String
            Get
                Nom = _Nom
            End Get
            Set(ByVal value As String)
                _Nom = value
            End Set
        End Property
     
        Public Property Descriptor() As String
            Get
                Descriptor = _Descriptor
            End Get
            Set(ByVal value As String)
                _Descriptor = value
            End Set
        End Property
        Public Property Version() As String
            Get
                Version = _Version
            End Get
            Set(ByVal value As String)
                _Version = value
            End Set
        End Property
        Public Property Objet() As List(Of clsObject)
            Get
                Objet = _Objet
            End Get
            Set(value As List(Of clsObject))
                _Objet = value
            End Set
     
        End Property
    End Class


    Ensuite pour écrire le XML C'est très simple.

    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
     
    Private Sub EcritureXML()
            Dim obj As New List(Of clsObject)
            Dim classes As New clsClassesHome
            Dim xs As XmlSerializer
            Dim wr As StreamWriter
            '-------------------------------------
            'Je lance des méthodes pour créer les objets, attributs et entête bidon
            obj = AddObj()
            classes = addHomeXML(obj)
            '-------------------------------------
     
            wr = New StreamWriter(Application.StartupPath & "/classes.xml")
     
            'Ici j'ai laissé en commentaire si vous souhaitez faire uniquement la list
            'xs = New XmlSerializer(GetType(List(Of clsObject)), New XmlRootAttribute("classes"))
     
            xs = New XmlSerializer(GetType(clsClassesHome), New XmlRootAttribute("classes"))
            xs.Serialize(wr, classes)
            wr.Close()
        End Sub
    Pour la lecture:
    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
     
    Private Sub lectureXML()
            'Dim MyLists As New List(Of clsObject)
            Dim MyClass as clsClasseHome
            Dim xs As XmlSerializer
            Dim Obj As New clsObject
     
            'xs = New XmlSerializer(GetType(List(Of clsObject)), New XmlRootAttribute("classes"))
     
            xs = New XmlSerializer(GetType(clsClasseHome), New XmlRootAttribute("classes"))
     
            Using stream = New System.IO.StreamReader(Application.StartupPath & "/classes.xml")
                ' désérialise le document XML présent dans le flux (stream) spécifié en le castant au type de la liste.
                'MyLists = CType(xs.Deserialize(stream), List(Of clsObject))
     
                MyClass = CType(xs.Deserialize(stream), clsClassesHome)
            End Using
        End Sub
    Voila, si vous avez des commentaires pour que j’améliore encore cela, n’hésitez pas.

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

Discussions similaires

  1. [Débutant] Gestion d'un fichier XML
    Par BlackAlpha dans le forum C#
    Réponses: 8
    Dernier message: 10/12/2014, 14h37
  2. [C#] Gestion d'un fichier XML.
    Par Trousse dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/03/2012, 12h14
  3. Gestion d'un fichier XML en VB 2010
    Par mandra123 dans le forum VB.NET
    Réponses: 3
    Dernier message: 31/10/2010, 14h34
  4. Choix d'un outils de gestion de source
    Par superfly dans le forum SCM
    Réponses: 5
    Dernier message: 01/09/2007, 01h14
  5. Réponses: 2
    Dernier message: 17/12/2005, 20h07

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