Bonjour,

Un fichiers .xml contient la balise 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>
La méthode Validate suivante renvoie l'erreur suivante

[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);
            }
        }
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);
            }
        }
    }
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

[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
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.0al"
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>

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>
Ceci informe que la valeur enumerée Name du type existe bien .

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