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

Windows Presentation Foundation Discussion :

Validation d'un fichier xml avec un fichier xsd présent en ressource


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 90
    Points : 60
    Points
    60
    Par défaut Validation d'un fichier xml avec un fichier xsd présent en ressource
    Bonjour,

    Dans le cadre d'un projet j'ai un fichier (.xml) de regles que je suis amené a chargé au lancement de mon application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                    Dim _textStreamReader As StreamReader = New StreamReader(myAssembly.GetManifestResourceStream("MyProject.Rules.xml"))
     
                    Dim deserializer As XmlSerializer = New XmlSerializer(GetType(MyClasseRule))
                    Using textReader As TextReader = _textStreamReader
                        Dim listc As MyClasseRule= CType(deserializer.Deserialize(textReader), MyClasseRule)
                        Me._listrules = listc
                        textReader.Close()
                    End Using
    jusqu'ici tout va bien.

    Suite à cela j'aimerais mettre en place une validation du fichier à partir d'un xsd présent lui aussi en ressource.

    c là que je m'emmèe les pinceaux et n'arrive pas à bien saisir comment faire le lien entre le xml et le xsd.

    en lisant plusieurs tuto j'ai essayé de cette maniere (ca ne fonctionne pas)

    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
     
     Dim schemaStream As Stream = myAssembly.GetManifestResourceStream("ILOJTNaming.Rules.xsd")
     
                Dim schema As System.Xml.Schema.XmlSchema = System.Xml.Schema.XmlSchema.Read(schemaStream, New System.Xml.Schema.ValidationEventHandler(AddressOf ValidationCallBack)) 
     
     
                '' Set the validation settings.
                Dim settings As XmlReaderSettings = New XmlReaderSettings()
                settings.ValidationType = ValidationType.Schema
     
                settings.Schemas.Add(Schema)
     
                ' Create the XmlReader object.
                Dim reader As XmlReader = XmlReader.Create(myAssembly.GetManifestResourceStream("ILOJTNaming.Rules.xml"), settings)
     
                ' Parse the file. 
                While reader.Read()
                End While
    J'ai un problème avec la déclaration du schéma et plus globalement à comprendre comment faire car même si j'ai trouvé plusieurs axes d'approches en furetant je n'arrive pas à les mettre en place.

    Quelqu'un aurait-il des tutos sur le sujet? ou aurait déjà été confronté à ce cas d'utilisation ou aurait un conseil?

    Cordialement,
    Christophe.

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    (je) n'arrive pas à bien saisir comment faire le lien entre le xml et le xsd.
    c'est la propriété Schema qui fait la liaison.

    Après "settings.Schemas.Add(Schema)", ajouter l'instruction "settings.Schemas.Compile()".

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 90
    Points : 60
    Points
    60
    Par défaut
    Merci pour votre réponse.

    J'ai réussi à faire fonctionner la validation. en fait l'erreur venait de la déclaration de mon ValidationEvent Handler.

    Le code suivant marche:

    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
     
                Dim myAssembly As System.Reflection.Assembly
                myAssembly = System.Reflection.Assembly.GetExecutingAssembly()
     
                Dim myTextStreamReader As StreamReader = New StreamReader(myAssembly.GetManifestResourceStream("ILOJTNaming.Rules.xml"))
                ' Get the schema to use
                Dim schemaStream As Stream = myAssembly.GetManifestResourceStream("ILOJTNaming.Rules.xsd")
     
                Dim valEventHandler As System.Xml.Schema.ValidationEventHandler = New System.Xml.Schema.ValidationEventHandler(AddressOf ValidationCallBack)
     
                Dim schema As System.Xml.Schema.XmlSchema = System.Xml.Schema.XmlSchema.Read(schemaStream, valEventHandler)
     
                '' Set the validation settings.
                Dim settings As XmlReaderSettings = New XmlReaderSettings()
                settings.ValidationType = ValidationType.Schema
                settings.Schemas.Add(schema)
     
     
                ' Create the XmlReader object.
                Dim reader As XmlReader = XmlReader.Create(myTextStreamReader, settings)
     
                ' Parse the file. 
                While reader.Read()
                End While
    code à encadrer aver try catch pour remonter l'erreur.

    Cela fonctionne sans le schemas.compile()

    Par contre le validationEventHandler que je declare est un peu bidon car le code ne passe jamais dedans alors que je pensais que le code doit passer dedans en cas de pb...

    Quelqu'un saurait-il m'expliquer pq j'ai ce comportement et si je dois améliorer qqchose. Même si le résultat escompté est là vu ma déclaration du validationEventHandler j'ai l'impression que ça fait un peu rustine.

    Cordialement

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/06/2012, 17h55
  2. Valider un fichier XML avec un fichier XSD
    Par Yvan_F1 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/11/2009, 03h47
  3. Réponses: 3
    Dernier message: 24/07/2009, 14h04
  4. Diviser un fichier XML en plusieurs fichiers XML avec XSLT
    Par bobkorn dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/04/2008, 12h13
  5. [Xml/Xsd]valider son fichier Xml avec un schéma xsd
    Par ePoX dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/02/2006, 22h30

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