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

Valider XML Discussion :

urn non existant


Sujet :

Valider XML

  1. #1
    Membre régulier
    urn non existant
    Bonjour,

    Je travaille à la validation .xsd d'un fichier xml.

    La fonction Validate utilisée est la suivante

    Code C# :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
     
     
    private static void Validate(string fluxXML, XmlSchemaSet schemaSet)
            {
                int CompteurNoeuds = 0;
     
                vreader = null;
     
                try
                {
                    Console.WriteLine("\r\nValidation du fichier XML {0}...", fluxXML.ToString());
     
                    _logger.Debug("\r\nValidation du fichier XML {0}..." + fluxXML.ToString());
     
                    XmlReaderSettings settings = new XmlReaderSettings();
     
                    settings.Schemas.Add(schemaSet);
                    settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
                    settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
                    settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
                    settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
     
                    settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
                    settings.ValidationType = ValidationType.Schema;
     
                    using (var sr = new StringReader(fluxXML))
                    {
                        //Create the schema validating reader.
                        vreader = XmlReader.Create(sr, settings);
     
                        while (vreader.Read())
                        {
                            CompteurNoeuds++;
     
                            _logger.DebugFormat("Validation terminée");
                        }
     
                        //Close the reader.
                        vreader.Close();
     
                        //la variable nomNoeud est affectée dans la méthode ValidationCallBack appelée quand une erreur se produit.
                        //si nomNoeud est == null=> pas d'erreur de validation
     
                        if (nomNoeud == null)
                        {
                            _logger.Debug("Le fichier est conforme aux fichiers .XSD");
                        }
                        else
                        {
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.Fatal("Erreur à l'extraction d'une affaire de l'enveloppe de type DEDistributionType  " + ex.Message + ex.StackTrace);
                }
            }


    Et la fonction ValidationCallback liée est la suivante
    Code C# :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
     
     
     private static void ValidationCallBack(object sender, ValidationEventArgs args)
            {
                nomNoeud = null;
                valeurNoeud = null;
     
                if (args.Severity == XmlSeverityType.Warning)
                {
                    nomNoeud = vreader.Name;
     
                    valeurNoeud = vreader.Value;
     
                    _logger.Fatal("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
                }
                else
                {
                    nomNoeud = vreader.Name;
     
                    valeurNoeud = vreader.Value;
     
                    _logger.Fatal("\tErreur de validation : " + args.Message);
     
                    _logger.Fatal("Le nom de noeud est " + nomNoeud);
     
                    _logger.Fatal("La valeur de noeud est " + valeurNoeud);
     
                    _logger.Fatal("les informations de schema sont " + vreader.SchemaInfo);
                }
            }

    le message d'erreur reçu est le suivant
    [QUOTE]

    [08:31:11] [DBG] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] Validation terminée
    [08:31:18] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] Erreur de validation : L'élément 'urn:plar:affaire' n'est pas déclaré.
    [08:31:19] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] Le nom de noeud est affaire
    [08:31:20] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] La valeur de noeud est
    [08:31:53] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] les informations de schema sont System.Xml.XsdValidatingReader
    [ [/QUOTE]

    Le fichier Xml présente en effet un noeud affaire qui est le suivant

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    <affaire xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si="http://www.w3.org/2001/XMLSchema-instance" xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />sd="http://www.w3.org/2001/XMLSchema" xmlns="urn:plar">


    L'urn Plar n'existe pas, si j'ai bien compris.
    Les informations concernant l'objet affaire sont dans le fichier nommé plar_V06_import.xsd.
    Dans ce fichier , on trouve les informations suivantes

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- PLAR -->
    <schema xmlns = "http://www.w3.org/2001/XMLSchema"
    		xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />s="http://www.w3.org/2001/XMLSchema"
    		xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />al="urn:oasis:names:tc:emergency:edxl:ciq:1.0<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />al"
    		elementFormDefault = "qualified"
    		attributeFormDefault = "unqualified"
    		version = "0.6">
     
     
    <xs:import namespace="urn:oasis:names:tc:emergency:edxl:ciq:1.0<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />al"
    	schemaLocation="./EDXL/edxl-de-v2.0-csprd01/schema/other-supporting-schema/EDXLCT_wd05/edxl_xAL.xsd"/>



    Merci beaucoup de bien vouloir m'aider sur ce point car je "tourne en rond".

    Bien cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Membre émérite
    Au minimum, le schéma manque une précision sur le targetNamespace.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <schema xmlns = "http://www.w3.org/2001/XMLSchema"
    xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />s="http://www.w3.org/2001/XMLSchema"
    xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />al="urn:oasis:names:tc:emergency:edxl:ciq:1.0<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />al"
    targetNamespace="urn:plar"
    elementFormDefault = "qualified"
    attributeFormDefault = "unqualified"
    version = "0.6">

    ps: Faites attention aux simileys, sélectionez "Désactiver les smileys dans le message". On ne peut pas lire exactement avec similey, et là je peux seulement deviner en le remplaçant par .