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 :

Gestion des XmlException


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Par défaut Gestion des XmlException
    Bonjour à tous,

    Avant d'exposer mon problème, je voudrais saluer toute la communauté de developpez.com qui me permet à chaque fois de trouver une solution à mes différents problèmes.

    Je développe en ce moment une application sous Visual studio express 2010 me permettant de contrôler l’intégrité d'un fichier XML avec un schéma xsd.
    Mon programme fonctionne très bien. Cependant, j'ai un léger souci sur la gestion des exceptions.
    Je ne sais pas si mon problème est lié à une limitation de la class System.Xml.XmlReaderSettings ou si mon code est mal rédigé.

    Je contrôle donc mon fichier xml et gère les exceptions grâce à un handler.
    Ce handller me trouve bien mes erreurs que j'affiche dans un richtextbox. Je constate cependant que le code ci dessous me permet d'afficher plusieurs erreur du moment ou elle sont dans des groupes de balise différents.
    Si en revanche mon fichier comporte deux erreur dans le même groupe de balises, seulement la première erreur est affiché.


    Ici le code principale appelé par un tooldstripmenu
    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
     
    Private Sub XmlValidToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles XmlValidToolStripMenuItem.Click
            Dim settings As XmlReaderSettings = New XmlReaderSettings()
            settings.Schemas.Add(Nothing, ".\Astm.xsd")
            settings.ValidationType = ValidationType.Schema
            Dim ItemSelected As ListView.SelectedListViewItemCollection = ListView1.SelectedItems
            Dim xfont As New Font(XmLvalidator.Font, 14)
            AddHandler settings.ValidationEventHandler, AddressOf XmlValidationError
     
            Dim taille As Single = 12
            Dim reader As XmlReader = XmlReader.Create(ItemSelected(0).SubItems(0).Text, settings)
            Try
                XmLvalidator.Clear()
                XmlException_text.Clear()
     
                While (reader.Read())
                End While
     
     
            Catch exml As XmlException
                TabControl1.SelectedIndex = 2
                XmlException_text.Text += vbCrLf & "---------------------------------------------"
                XmlException_text.Text += vbCrLf & vbCrLf & exml.Message
                XmlException_text.Text += "---------------------------------------------xmlexception" & vbCrLf
     
                XmlException_text.Font = New Font("arial", taille, FontStyle.Bold)
                XmlException_text.ForeColor = Color.DarkRed
     
            Catch exml2 As XmlSchemaValidationException
                TabControl1.SelectedIndex = 2
                XmlException_text.Text += vbCrLf & "---------------------------------------------"
                XmlException_text.Text += vbCrLf & vbCrLf & exml2.Message
                XmlException_text.Text += "---------------------------------------------XmlSchemaValidationException" & vbCrLf
     
                XmlException_text.Font = New Font("arial", taille, FontStyle.Bold)
                XmlException_text.ForeColor = Color.DarkRed
     
            Catch exml3 As XmlSchemaException
     
                TabControl1.SelectedIndex = 2
                XmlException_text.Text += vbCrLf & "---------------------------------------------"
                XmlException_text.Text += vbCrLf & vbCrLf & exml3.Message
                XmlException_text.Text += "---------------------------------------------XmlSchemaException" & vbCrLf
     
                XmlException_text.Font = New Font("arial", taille, FontStyle.Bold)
                XmlException_text.ForeColor = Color.DarkRed
     
     
            End Try
            reader.Close()
            TabControl1.SelectedIndex = 2
            XmLvalidator.Text = RichTextBox1.Text
            If XmlException_text.Text = Nothing Then
                XmlException_text.Text += vbCrLf & vbCrLf & "Validation OK"
                XmlException_text.ForeColor = Color.LimeGreen
                XmlException_text.Font = New Font("arial", taille, FontStyle.Bold)
            End If
     
     
     
        End Sub

    Ici le code permettant de gérer les exceptions de schéma

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub XmlValidationError(ByVal sender As Object, ByVal e As ValidationEventArgs)
            Dim str As String = e.Exception.Message
            'Dim str2 As String = e.Exception.LineNumber
            'Dim str3 As String = e.Exception.LinePosition
            Dim taille As Single = 12
            TabControl1.SelectedIndex = 2
            XmlException_text.Text += str
            XmlException_text.Text += vbCrLf & vbCrLf & "---------------------------------------------XmlValidationError" & vbCrLf & vbCrLf
            XmlException_text.Font = New Font("arial", taille, FontStyle.Bold)
            XmlException_text.ForeColor = Color.DarkRed
        End Sub

    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
    20
    21
    22
    23
    24
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Message>
    <header>
    	<senderName></senderName>
    	<version>1394-97</version>
    	<dateTime>20140508002709</dateTime>
    </header>
    <request>
    	<Information>
    		<element1>B3031500059</element1>
    		<element2>REY</element2>
    		<element3>IRMA</element3>
    		<element4>F</element4>
    	</Information>
    	<test>
    		<spec>
    			<specIdentifier>940508210001</specIdentifier>
    			<testDateTime>20140508003600</testDateTime>
    			<specType>5648</specType>
    		</spec>
    	</test>
    </request>
    </Message>

    Pour illustrer mon problème, si j'ai deux anomalies dans le groupe <information>, sur <element1> et <element2>, mon code ne retourne que l'exception sur <element1>.
    Par contre, si j'ai une anomalie sur le groupement <information> et une autre sur le groupement <spec>, mon code me retourne bien les deux erreurs.

    Je n'arrive pas à comprendre ou je peux avoir faux... Comment puis je faire pour obtenir toutes les erreurs de construction de mon fichier xml en une seules fois et en toutes circonstances?
    Merci pour vos lumières.

    Starbuck

  2. #2
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Par défaut
    Et bien... Je ne suis pas claire ou alors personne n'a été confronté à ce problème?

  3. #3
    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 Bonjour
    En fait avec votre code, je ne vois pas comment il est possible d'avoir deux erreurs, puisque si une exception est levé, tu sors de la boucle Read().

    Du coup, j'aurai plutôt fais une boucle logique qui elle contient le read et le Try-Catch, un truc du genre:


    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
    Dim Continue_boucle as Boolean = true
    Dim reader As XmlReader = XmlReader.Create(ItemSelected(0).SubItems(0).Text, settings)
     
    While Continue_boucle 
     
         'Test pour savoir si c'est la fin du fichier
         If read.EOF Then
              Continue_boucle =False
         Else
     
             Try
     
                reader.Read()
     
            Catch exml As XmlException
                TabControl1.SelectedIndex = 2
                XmlException_text.Text += vbCrLf & "---------------------------------------------"
                XmlException_text.Text += vbCrLf & vbCrLf & exml.Message
                XmlException_text.Text += "---------------------------------------------xmlexception" & vbCrLf
     
                XmlException_text.Font = New Font("arial", taille, FontStyle.Bold)
                XmlException_text.ForeColor = Color.DarkRed
     
            Catch exml2 As XmlSchemaValidationException
                TabControl1.SelectedIndex = 2
                XmlException_text.Text += vbCrLf & "---------------------------------------------"
                XmlException_text.Text += vbCrLf & vbCrLf & exml2.Message
                XmlException_text.Text += "---------------------------------------------XmlSchemaValidationException" & vbCrLf
     
                XmlException_text.Font = New Font("arial", taille, FontStyle.Bold)
                XmlException_text.ForeColor = Color.DarkRed
     
            Catch exml3 As XmlSchemaException
     
                TabControl1.SelectedIndex = 2
                XmlException_text.Text += vbCrLf & "---------------------------------------------"
                XmlException_text.Text += vbCrLf & vbCrLf & exml3.Message
                XmlException_text.Text += "---------------------------------------------XmlSchemaException" & vbCrLf
     
                XmlException_text.Font = New Font("arial", taille, FontStyle.Bold)
                XmlException_text.ForeColor = Color.DarkRed
     
     
            End Try
     
        End If
     
    End While

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Par défaut
    Merci mactwist69 pour votre réponse.

    J'ai désactivé l'appel de mon handler et suivi vos conseils.
    J'ai supprimé la boucle permettant de savoir si c'est la fin de fichier car j'avais une erreur.

    J'intercepte ces exceptions et les envoi dans une ritchtextbox et j'aimerais être capable d'afficher toutes les erreurs du fichier en une seule fois.
    Ce n'est peux être pas possible car dès qu'une erreur est trouvée la validation xml ne peux se poursuivre...

    Avec votre code j'affiche bien les erreurs mais suis obligé de corriger les erreurs une a une, puis de relancer la validation pour mettre en évidence l'erreur suivante...

    Si vous avez une idée.

  5. #5
    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
    Vous voulez dire que reader.read() refuse de s’exécuter une fois qu'une exception a été levé ?

  6. #6
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Vous voulez dire que reader.read() refuse de s’exécuter une fois qu'une exception a été levé ?
    C'est exactement ça.
    Cela est il un comportement normale?
    Je me dis que oui car pour valider le schéma xml, il faut vérifier l'intégralité du fichier, et dès qu'une erreur survient, il est impossible de continuer...
    Mais peux être existe t'il un contournement afin de récupérer toutes les xmlexception ainsi que tous les xmlschemaexception en une seule fois...

    Starbuck

Discussions similaires

  1. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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