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 :
J'ai un code qui est sensiblement pareil à tous les exemples que je peut trouver sur le net.data at the root level is invalid. line 1 position 1.
Voici la classe implémentant le xsd :
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
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(); } } }
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?
Partager