Bonjour,
Un fichiers .xml contient la balise suivante
La méthode Validate suivante renvoie l'erreur suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <PostCode xmlns="urn:oasis:names:tc:emergency:edxl:ciq:1.0:xal"> <Identifier p8:Type="Name" xmlns:p8="urn:oasis:names:tc:emergency:edxl:ciq:1.0:xal">93400</Identifier></PostCode>
[15:51:39] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] Erreur de validation : L'attribut 'urn:oasis:names:tc:emergency:edxl:ciq:1.0al:Type' n'est pas déclaré.
[15:51:44] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] Le nom de noeud est p8:Type
[15:52:02] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] La valeur de noeud est Name
[15:52:03] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] les informations de schema sont System.Xml.XsdValidatingReader
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
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 /// <summary> /// Méthode permettant de valider, si le flux XML est conforme aux fichiers .XSD auxquels il /// fait référence et constituant le schemaSet passé en paramètre /// </summary> /// <param name="fluxXML"> </param> /// <param name="schemaSet"></param> 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 = schemaSet; //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++; } //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); } }Du fait d'une erreur, on entre dans la méthoode ValidationCallback et le message suivant déjà spécifié plus haut apparaît au niveau du logger
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
25
26
27
28
29
30
31 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); } } }
Je suis descendue dans les différentes arborescences des fichiers .xsd liés au namespace spécifié dans le flux xml , c'est à dire "urn:oasis:names:tc:emergency:edxl:ciq:1.0[17:08:43] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] Erreur de validation : L'attribut 'urn:oasis:names:tc:emergency:edxl:ciq:1.0al:Type' n'est pas déclaré.
[17:08:43] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] Le nom de noeud est p8:Type
[17:08:43] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] La valeur de noeud est Name
[17:08:43] [FTL] [Paris.ConnecteurPFE.MqAffaireManager.ServiceReceptionAffaire] les informations de schema sont System.Xml.XsdValidatingReader
al"
Voici ce que je vois
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
25 <xs:element name="PostCode" minOccurs="0"> <xs:annotation> <xs:documentation> A container for a single free text or structured postcode. Note that not all countries have post codes </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="Identifier" type="IdentifierType" maxOccurs="unbounded"> <xs:annotation> <xs:documentation> The postcode is formatted according to country-specific rules. Example: SW3 0A8-1A, 600074, 2067. This element can also be used to define the semantics of what each code in the post code means </xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <xs:element name="Number" type="IdentifierType"> <xs:annotation> <xs:documentation> Data associated with the number of the thoroughfare. E.g. 39 in 39 Baker Street, street range, street suffix </xs:documentation> </xs:annotation> </xs:element>
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 <xs:complexType name="IdentifierType"> <xs:annotation> <xs:documentation> Complex type for internal reuse </xs:documentation> </xs:annotation> <xs:simpleContent> <xs:extension base="ct:String"> <xs:attribute name="Type" type="IdentifierElementTypeList"> <xs:annotation> <xs:documentation> Indicates which part of number or identifier this element contains. Some "numbers" are as simple as 42 and some "numbers" are more like complex aplhanumberic identifiers as Postcodes in UK or Canada, e.g. M2H 2S5. It may be necessary to separate the "number" into sub-elements and indicate what type of information each of them contains. </xs:documentation> </xs:annotation> </xs:attribute>
Ceci informe que la valeur enumerée Name du type existe bien .
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 <xs:simpleType name="IdentifierElementTypeList"> <xs:annotation> <xs:documentation> A list of name types for commonly used Number type </xs:documentation> </xs:annotation> <xs:restriction base="xs:normalizedString"> <xs:enumeration value="Name"> <xs:annotation> <xs:documentation> Applicable to mail box office names such as PO BOX, GPO BOX, MAIL BAG NO., etc. </xs:documentation> </xs:annotation> </xs:enumeration>
Je ne comprends donc pas la raison de cette erreur .
Peut être pouvez-vous m'informer d'un outil de validation .xsd des flux xml qui puisse valider en fonction de plusieurs fichiers .xsd, je veux bien; peut être que la methodoe Validate ne va pas assez loin dans les différents fichiers .xsd concernés par la validation.
Si vous parveniez à identifier le souci vous m'aideriez beaucoup.
Merci beaucoup de votre aide.
Bien cordialement.
new_wave
Partager