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

[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
[

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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="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:xs="http://www.w3.org/2001/XMLSchema"
		xmlns:xal="urn:oasis:names:tc:emergency:edxl:ciq:1.0:xal"
		elementFormDefault = "qualified"
		attributeFormDefault = "unqualified"
		version = "0.6">
 
 
<xs:import namespace="urn:oasis:names:tc:emergency:edxl:ciq:1.0:xal"
	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