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
le message d'erreur reçu est le suivant
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 fichier Xml présente en effet un noeud affaire qui 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
[
L'urn Plar n'existe pas, si j'ai bien compris.
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">
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
Partager