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

Framework .NET Discussion :

Connaitre la ligne ou se trouve un XmlReader


Sujet :

Framework .NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 44
    Points
    44
    Par défaut Connaitre la ligne ou se trouve un XmlReader
    Bonjour,

    Dans le cadre de l'écriture d'un parser XML qui contrôle également les caractères autorisés dans mes fichiers, j'aimerai savoir comment récupérer les lignes ou se situent les erreurs (dans le callback et dans CheckChars ).

    Pouvez vous m'aider j'ai pas trouvé sur la doc msdn de XmlReader

    Cordialement,

    Mckilleron

    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
    Private Sub ValidateXml(ByVal xmlPath As String, ByVal xsdPath As String, ByVal xmlns As String)
     
            Dim schemaSet As New XmlSchemaSet()
            schemaSet.Add(xmlns, xsdPath)
     
            Dim ReaderSettings As New XmlReaderSettings()
            ReaderSettings.ValidationType = ValidationType.Schema
            ReaderSettings.Schemas = schemaSet
     
            AddHandler ReaderSettings.ValidationEventHandler, AddressOf ValidationCallBack
     
            Dim xmlReader As XmlReader = xmlReader.Create(xmlPath, ReaderSettings)
     
            While xmlReader.Read()
     
                If Me.caracteresInterdits.Checked Then
                    If CheckChars(xmlReader.Value) = False And xmlReader.Value.Length > 0 Then
     
                        SetText("la chaine """ + xmlReader.Value + """contient des caractères interdits" + Chr(10))
     
                    End If
     
                End If
            End While
            If Me.ResultTextBox.TextLength = 0 Then
                SetText("Aucune Erreur de validation")
            End If
            SetTextLabelEtat("Etat : Prêt")
     
        End Sub
     
        Private Sub ValidationCallBack(ByVal sender As Object, ByVal e As ValidationEventArgs)
            SetText("Erreur de validation" + e.Message + Chr(10))
        End Sub
     
     
        Function CheckChars(ByVal chaine As String)
     
            Dim myRegex = New Regex("^(?:\w|\d|[""&'+_-]|[\(\)\,\.\/\\\<\>;\:\s\=\?\@])+$", RegexOptions.IgnoreCase)
     
            Return myRegex.IsMatch(chaine)
     
        End Function

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Une piste peut-être en regardant du côté de la classe XmlTextReader. Cette classe a une propriété LineNumber. Elle indique le numéro de ligne en cours.
    A tester ...

    Eb.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Avec le XmlTextReader je ne peux apparemment pas passer de reader settings, donc je peux pas faire de validation XSD, la méthode Create n'est pas accessible.

    Sinon ca implique que je boucle une fois pour parser, et une fois pour controler les caractères interdit.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Effectivement ! Mais en utilisant la propriété Settings de XmlTextReader, est-ce que ça fonctionnerait ? Je ne peux pas tester, je n'ai pas de XSD sous la main ...

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim schemaSet As New XmlSchemaSet()
    schemaSet.Add(xmlns, xsdPath)
    Dim xmlReader As XmlTextReader = New XmlTextReader(xmlPath)
    AddHandler xmlReader.Settings.ValidationEventHandler, AddressOf ValidationCallBack
    xmlReader.Settings.ValidationType = ValidationType.Schema
    xmlReader.Settings.Schemas = schemaSet
    Ou bien comme tu le dis, 2 passes ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    xmlReader.Settings.ValidationType = ValidationType.Schema déclenche une exception : la référence d'objet n'est pas définie à une instance d'un objet

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Ok, j'ai trouvé un article sur Msdn où il est indiqué qu'on peut envelopper une instance de lecteur dans un autre lecteur, ça donnerait quelque chose du genre :
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            Dim ReaderSettings As New XmlReaderSettings()
            Dim schemaSet As New XmlSchemaSet()
            schemaSet.Add(xmlns, xsdPath)
            Dim aXmlTextReader As XmlTextReader = New XmlTextReader(xmlPath)
            ReaderSettings.ValidationType = ValidationType.Schema
            ReaderSettings.Schemas = schemaSet
            AddHandler ReaderSettings.ValidationEventHandler, AddressOf ValidationCallBack
            Dim aXmlReader = XmlReader.Create(aXmlTextReader, ReaderSettings)
            While aXmlReader.Read()
                If aXmlTextReader.Value.Trim.Length > 0 Then
                    ListBox1.Items.Add(aXmlTextReader.LineNumber & "-" & aXmlTextReader.Value)
                End If
            End While
    Tu remplaces bien entendu la partie Listbox1.items.add ...
    Est-ce que ce serait concluant ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Yes ca marche du tonerre !

    Encore merci

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Cool. N'oublie pas le d'indiquer que le problème est résolu.
    eb.

Discussions similaires

  1. [PDO] Connaitre le n° de ligne ou se trouve l'erreur SQL avec PDO
    Par greg91 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/02/2012, 18h01
  2. [VBA-E] Récupérer le numéro de ligne où se trouve un bouton
    Par Freiya dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 29/01/2011, 00h06
  3. connaitre la ligne selectionné dans un StringGrid
    Par mahe01 dans le forum Delphi
    Réponses: 4
    Dernier message: 15/06/2006, 10h15
  4. [Apache] UR : ligne que je trouve pas ...
    Par stouqx dans le forum Apache
    Réponses: 6
    Dernier message: 20/05/2006, 21h27
  5. Connaitre la ligne d'un DBgrid
    Par Lucien dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/10/2005, 15h09

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