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

C# Discussion :

Validation XML par XSD


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Validation XML par XSD
    Bonjour a tous,

    Je developpe sous visual studio 2005 (.net 2.0) en c#.
    J'aimerai valider une document xml en fonction d'une xsd.
    Le problème c'est que mon schéma est composé de plusieurs fichiers xsd, et fait des références vers ceux ci (via include ou import).

    J'utilise un XMLSchemaSet (je ne veux pas de XmlValidatingReader).

    Voici un bout de mon code :

    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
     
    XmlSchemSet schemaSet = new XmlSchemaSet();
    schemaSet.Add(null, xsd_path);
    schemaSet.Compile();
     
     XmlReaderSettings settings = new XmlReaderSettings();
     settings.Schemas = schemaSet;
     settings.ValidationEventHandler += new  ValidationEventHandler(ValidationCallBack);
     settings.ValidationType = ValidationType.Schema;
     
     XmlReader reader = XmlReader.Create(xml_path, settings)
                try
                {             
                    while (reader.Read())
                    { }
     
                    reader.Close();              
                }
                catch (XmlException e)
                {
                    reader.Close();
                    MessageBox.Show(e.Message);           
                }
    Code classique.
    Le problème c'est que l'handler d'erreur n'est jamais appelé.
    Le code marche bien si le xsd ne fait pas de référence vers d'autre fichier (et il m'est impossible de modifier les schemas)

    J'ai essayer beaucoup de chose sur les validationflags du XmlReaderSettings, les XmlUrlResolver rien n'y fait, il ne se passe rien.

    J'ai aussi tenté d'ajouter tous les xsd dans le xmlschemaset, le resultat est le même. Chaque fois le schéma est compilé, mais la validation ne marche pas.

    J'ai affiché tous les type contenu dans le schéma et tous les types sont présents. Je ne sais plus trop quoi faire.

    Merci pour votre aide

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Bonjour

    As tu essayé en utilisant la méthode Validate sur un XmlDocument ?

    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
     
    private void MonTest(string sXmlFileName, string sSchemaFileName)
    {
      try
      {
         XmlDocument oDoc = new XmlDocument();
         oDoc.Load(sXmlFileName);
         oDoc.Schemas.Add(null, sSchemaFileName);
         oDoc.Validate(this.ValidationEventHandler);
         oDoc = null;
      }
      catch (Exception e)
      {
        MessageBox.Show(e.Message);
      }
    }
    private void ValidationEventHandler(object sender, ValidationEventArgs e)
    {
        MessageBox.Show(e.Message);
    }

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Salut,

    Merci pour ton aide.
    Je ne connaissait pas cette méthode.
    Hélas, ça ne marche toujours pas.

    Les XmlException sont bien attrapées, mais les erreurs de validation non.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Normalement, tu n'es pas sensé partir en Exception.
    Quel exception as tu ?

    J'ai déjà eu le cas d'une validation qui partait en exception.
    Résultat, la validation n'était pas effectuée (aucun passage dans le ValidationHandler).
    Mon problème était du au fait que le xsd référencait d'autres xsd public disponibles sur internet et que le pc en question ne possédait pas de connexion internet.

    Tout tes fichiers xsd référencés sont ils bien présent au bon endroit ?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En fait je recupère les XMLException pour tout ce qui est erreur de formatage du fichier XML.

    Les erreurs de validation sont redirigé vers un handlers via :

    settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);

    La xsd que j'utilisai au début était un peu complexe, donc j'ai refait des tests avec une xsd plus simple (avec un import faisant reference à une xsd ne comprenant qu'un seul type).
    Tous mes fichiers sont présents (en l'occurence 2) et le pc est connecté à internet. Vous l'aurez deviné, ça ne fonctionne toujours pas.
    Le schéma est compilé mais il ne reconnait aucune balise lors de la vérification.
    Si quelqu'un peut me proposer un exemple de xsd et de xml avec un import ou un include où cela fonctionne, je suis preneur!

    Merci d'avance pour votre aide.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Pourriez vous me donner un exemple d'une xsd (avec des import ou include) (relativement simple) et d'un fichier xml, et du bout de code qui permettrait de valider le xml avec la xsd.

    Merci d'avance.

Discussions similaires

  1. Validation XML par XSD et ordre des balises
    Par Bz dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 03/06/2015, 21h19
  2. [Xerces] Validation XML par XSD
    Par hannibal.76 dans le forum XML
    Réponses: 0
    Dernier message: 09/03/2012, 10h53
  3. Validation XML par XSD
    Par alatox dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 29/06/2010, 17h57
  4. [SAX] Validation XML par XSD
    Par KernelControl dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 21/01/2009, 14h46
  5. Validation de XML par XSD sans MSXML
    Par XPierrot dans le forum Langage
    Réponses: 3
    Dernier message: 23/03/2006, 08h46

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