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 :

Désérialisation d'un fichier XML complexe [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Etudiant en Ingénierie des Architecture et Logiciels Systeme
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant en Ingénierie des Architecture et Logiciels Systeme

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut Désérialisation d'un fichier XML complexe
    Bonjour à tous. Je me présente ici car je ne sais pas vraiment où est-ce qu'on se présente ici alors....

    Je suis Gugoo, je fais 22 ans en Septembre, étudiant en alternance pour être ingénieur Architecture et Ingénierie des Systèmes et des Logiciels
    et en ce moment, je code beaucoup en VB.net pour terminaux Windows CE 5.0.

    J'ai un fichier XML qu'un client m'a donné et je dois pouvoir le traiter pour savoir ensuite comment je peux sérialiser un XML de cette forme (pour l'instant, je veux savoir comment récupérer les infos de son XML à lui)

    Le fichier est de cette forme :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    -<batchSaisie>-
        <lot lot_name="EQUIPMENT_-J_HYGRO_MA-161213-CAVE_0_TRADI#001" lot_number="3624621">
            <result value="12.1" max="99" min="95" parameter="Hygro consigne" result_number="1"/>
            <result value="" max="15" min="11" parameter="Tc consigne" result_number="2"/>
            <result value="" max="14" min="12" parameter="Tc humide" result_number="3"/>
       </lot>-
       <lot lot_name="EQUIPMENT_-J_HYGRO_MA-161213-CAVE_1_TRADI#001" lot_number="3624622">
            <result value="" max="99" min="95" parameter="Hygro consigne" result_number="5"/>
            <result value="" max="15" min="11" parameter="Tc consigne" result_number="6"/>
            <result value="" max="14" min="12" parameter="Tc humide" result_number="7"/>
            <result value="33" max="15" min="10" parameter="Tc sec" result_number="8"/>
       </lot>-
       <lot lot_name="EQUIPMENT_-J_HYGRO_MA-161213-CAVE_1__UF#001" lot_number="3624633">
            <result value="" max="99" min="95" parameter="Hygro consigne" result_number="9"/>
            <result value="" max="15" min="11" parameter="Tc consigne" result_number="10"/>
            <result value="34" max="14" min="12" parameter="Tc humide" result_number="11"/>
       </lot>
    </batchSaisie>
    J'ai déjà sérialiser plusieurs instance d'une classe grâce à un tableau bidimensionnel par le passé mais là, je pense qu'il me faudrait deux classes dont une classe Resultat par exemple et une classe Lot qui contient une ou plusieurs instances de Resultat mais après pour ranger les données et les classer ....

    Bref... Une idée ? Merci

  2. #2
    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
    Par défaut
    Bonjour,

    Quel sont ces tirets (-) devant et derrière l'élément BatchSaisie et derrière l'élément lot ?

    Par contre si le fichier se présente ainsi (sans les tirets)
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <batchSaisie>
        <lot lot_name="EQUIPMENT_-J_HYGRO_MA-161213-CAVE_0_TRADI#001" lot_number="3624621">
            <result value="12.1" max="99" min="95" parameter="Hygro consigne" result_number="1"/>
            <result value="" max="15" min="11" parameter="Tc consigne" result_number="2"/>
            <result value="" max="14" min="12" parameter="Tc humide" result_number="3"/>
       </lot>
       <lot lot_name="EQUIPMENT_-J_HYGRO_MA-161213-CAVE_1_TRADI#001" lot_number="3624622">
            <result value="" max="99" min="95" parameter="Hygro consigne" result_number="5"/>
            <result value="" max="15" min="11" parameter="Tc consigne" result_number="6"/>
            <result value="" max="14" min="12" parameter="Tc humide" result_number="7"/>
            <result value="33" max="15" min="10" parameter="Tc sec" result_number="8"/>
       </lot>
       <lot lot_name="EQUIPMENT_-J_HYGRO_MA-161213-CAVE_1__UF#001" lot_number="3624633">
            <result value="" max="99" min="95" parameter="Hygro consigne" result_number="9"/>
            <result value="" max="15" min="11" parameter="Tc consigne" result_number="10"/>
            <result value="34" max="14" min="12" parameter="Tc humide" result_number="11"/>
       </lot>
    </batchSaisie>

    La classe de base, l'élément racine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Imports System.Xml.Serialization
     
    <XmlRoot("batchSaisie")>
    Public Class DataBatchSaisie
        <XmlElement("lot")>
        Public Property lot As New List(Of Lot)
    End Class
    La classe de l'élément lot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Class Lot
        <XmlAttribute("lot_name")>
        Public Property lot_name As String = ""
        <XmlAttribute("lot_number")>
        Public Property lot_number As String = ""
        <XmlElement("result")>
        Public Property Result As New List(Of Result)
    End Class
    La classe de l'élément result
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Class Result
        <XmlAttribute("value")>
        Public Property Value As String = ""
        <XmlAttribute("max")>
        Public Property Max As Integer = 0
        <XmlAttribute("min")>
        Public Property Min As Integer = 0
        <XmlAttribute("parameter")>
        Public Property Parameter As String = ""
        <XmlAttribute("result_number")>
        Public Property Result_number As Integer = 0
    End Class
    La lecture 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
    17
    18
    19
        ''' <summary>Lecture du fichier XML BatchSaisie ; alimente les classes correspondantes.</summary>
        ''' <param name="filename">Le nom du fichier</param>
        ''' <returns>Une instance de la classe DataBacthSaisie contenant les données du fichier</returns>
        Private Function LitDataXMLBatchSaisie(ByVal filename As String) As DataBatchSaisie
            Try
                Using objStreamReader As New IO.StreamReader(filename)
                    Try
                        Return (New Xml.Serialization.XmlSerializer(GetType(DataBatchSaisie))).Deserialize(objStreamReader)
                    Catch ex As Exception
                        MsgBox("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
    Utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Private Sub XMLBatchSaisieToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles XMLBatchSaisieToolStripMenuItem.Click
            Dim DataBS As DataBatchSaisie = LitDataXMLBatchSaisie("d:\data\fichier XML\batchsaisie.xml")
            For Each Lot As Lot In DataBS.lot
                MessageBox.Show(String.Format("Nom : {0} ; Numéro : {1}", Lot.lot_name, Lot.lot_number))
                For Each Result As Result In Lot.Result
                    MessageBox.Show(String.Format("value={0} ; max={1} ; min={2} ; parameter={3} ; result_number={4}", Result.Value, Result.Max, Result.Min, Result.Parameter, Result.Result_number))
                Next
            Next
        End Sub
    On peut faire des surcharges de ToString dans les classes pour simplifier l'affichage.

    Attention, je n'ai pas forcement mis les attributs des éléments dans le bon type, à vous de compléter correctement cet exemple.
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Etudiant en Ingénierie des Architecture et Logiciels Systeme
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant en Ingénierie des Architecture et Logiciels Systeme

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut
    Merci de la réponse. Je viens de revenir au travail donc je test dès que possible. En effet, il n'y a pas de tirets, c'est lors du copy/paste que ça les a mi.

    EDIT : Les balises entre diamants dans chaque classe m'indique à la fin du diamant : "Le spécificateur d'attribut n'est pas une instruction complète. Utiliser un signe de continuation de ligne pour appliquer l'attribut à l'instruction suivante."

    On déclare des éléments racine XML comme ça : <xmlroot ("xxxx")> ? Parce que ça ne fonctionne pas chez moi en VB.NET

    EDIT2 : Après avoir réglé les quelques petits problèmes dûs au nommage des attributs et fonctions, j'ai enlevé carrément les balises XML du code VB.NET, le programme se lance mais une exception est levée. Le message de l'exception ex est : "Il existe une erreur dans le document XML(2, 2)."

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Etudiant en Ingénierie des Architecture et Logiciels Systeme
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant en Ingénierie des Architecture et Logiciels Systeme

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut
    Citation Envoyé par Gugoo Voir le message
    EDIT : Les balises entre diamants dans chaque classe m'indique à la fin du diamant : "Le spécificateur d'attribut n'est pas une instruction complète. Utiliser un signe de continuation de ligne pour appliquer l'attribut à l'instruction suivante."

    On déclare des éléments racine XML comme ça : <xmlroot ("xxxx")> ? Parce que ça ne fonctionne pas chez moi en VB.NET
    En effet, chez moi, la déclaration des éléments XML en VB.Net fonctionne comme ceci <XMLRoot(ElementName:="xxx")> _

    J'ai trouvé ça en cherchant un peu sur le MSDN.

    Maintenant, j'ai un nouveau problème tout fonctionne sauf que je ne sais pas quand, pendant la lecture du fichier, j'ai une exception qui me dit "Il existe une erreur dans le document XML(5, 73)" et ça s'arrête là.

    Une lanterne serait-elle clémente pour m'éclairer ?

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

Discussions similaires

  1. importer un fichier xml complex
    Par elekis dans le forum PL/SQL
    Réponses: 1
    Dernier message: 26/08/2010, 11h20
  2. Désérialisation d'un fichier XML
    Par Bathou dans le forum C#
    Réponses: 7
    Dernier message: 07/06/2010, 16h33
  3. parser un fichier xml complexe.
    Par Smix007 dans le forum C#
    Réponses: 2
    Dernier message: 09/02/2010, 17h41
  4. [XStream] problème avec la désérialisation d'un fichier xml
    Par sidoumghar dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 25/11/2008, 12h23
  5. Load d'un fichier XML complexe
    Par gwendal86 dans le forum C#
    Réponses: 3
    Dernier message: 23/09/2008, 16h00

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