Bonjour,

Je cherche à valider un xml par intermédiaire d'un xsd.
Comme les fichiers que je doit valider sont très gros (environ 1 Go), et qu'aucun des valideur n'arrive à me faire ça dans un temps correct sans me bouffer toute la mémoire j'ai codé mon propre valideur.

Problème : J'utilise un fichier xml et un xsd qui est validé par XSV, mais qui me sort toujours l'exception suivante :

data at the root level is invalid. line 1 position 1.
J'ai un code qui est sensiblement pareil à tous les exemples que je peut trouver sur le net.

Voici la classe implémentant le xsd :

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
57
class Xsd
    {
 
        private XmlReaderSettings mXmlSettings;
        private XmlParserContext mXmlContext;
 
        protected XmlReaderSettings XmlSettings
        {
            get { return mXmlSettings; }
            set { mXmlSettings = value; }
        }
 
        protected XmlParserContext XmlContext
        {
            get { return mXmlContext; }
            set { mXmlContext = value; }
        }
 
        protected Xsd()
        {
            XmlSettings = new XmlReaderSettings();
            XmlSettings.ValidationType = ValidationType.Schema;
            XmlSettings.ValidationEventHandler += new ValidationEventHandler(ValidationHandler);
 
            XmlContext = new XmlParserContext(null, null, null, XmlSpace.None, Encoding.UTF8);
 
        }
 
        public Xsd(string pXsdFilePath)
            : this()
        {
            XmlTextReader xr = new XmlTextReader(pXsdFilePath);
            XmlSettings.Schemas.Add(null, xr);
        }
 
        private static void ValidationHandler(object sender, ValidationEventArgs args)
        {
            throw new SyntaxErrorException("Xsd Validating Failed,Please check you Xml input File",
                                            args.Exception);
        }
 
        public void Validate(string pData)
        {
            XmlReader xr = null;
 
            try
            {
                xr = XmlReader.Create(new StringReader(pData), XmlSettings, XmlContext);
                while (xr.Read()) ;
            }
            finally
            {
                if (xr != null)
                    xr.Close();
            }
        }
    }
et le main qui utilise cette classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
static void Main(string[] args)
        {
            string XMLDoc = "monXML.xml";
            string XSDDoc = "monXSD.xsd";
 
            Xsd xsd = new Xsd(XSDDoc);
            xsd.Validate(XMLDoc);
        }

Est-ce que quelqu'un à une idée?