C# – The most performant way to validate XML against XSD

cnetxmlxml-validationxsd

I get a string variable with XML in it and have a XSD file. I have to validate the XML in the string against the XSD file and know there is more than one way (XmlDocument, XmlReader, … ?).

After the validation I just have to store the XML, so I don't need it in an XDocument or XmlDocument.

What's the way to go if I want the fastest performance?

Best Answer

Others have already mentioned the XmlReader class for doing the validation, and I wont elaborate further into that.

Your question does not specify much context. Will you be doing this validation repeatedly for several xml documents, or just once? I'm reading a scenario where you are just validating a lot of xml documents (from a third party system?) and storing them for future use.

My contribution to the performance hunt would be to use a compiled XmlSchemaSet which would be thread safe, so several threads can reuse it without needing to parse the xsd document again.

var xmlSchema = XmlSchema.Read(stream, null);
var xmlSchemaSet = new XmlSchemaSet();
xmlSchemaSet.Add(xmlSchema);
xmlSchemaSet.Compile();

CachedSchemas.Add(name, xmlSchemaSet);