Wouldn't it be easier if you validated your XML with XSD before loading and throw an error if it fails ?
I might be missing something here..please let me know if that approach works
XmlSchemaSet mySch= new XmlSchemaSet();
mySch.Add(SCH_NAMESPACE, YOUR_SCHEMA_FILE);
XDocument doc = XDocument.Load(YOU_XML_FILENAME);
string errMsg = "";
doc.Validate(mySch, (o, e) => {
msg += e.Message + Environment.NewLine;
});
if(msg != "")
{
}
else
{
}