Validation xml avec un xsd => Exception data at the root level is invalid. line 1 position 1.
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 :
Citation:
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:
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:
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?