As a continuation of my problem of transforming large Xml files, I need to check the schema.
I used this extension method, which can be clearly improved since it does not work correctly.
public static XElement ValidateXsd(this XElement source, string xsdPath) { var errors = new XElement("Errors"); // Reference: http://msdn.microsoft.com/en-us/library/bb358456.aspx var xsd = XDocument.Load(xsdPath); var xml = XDocument.Load(source.CreateReader()); var schemas = new XmlSchemaSet(); schemas.Add("", xsd.CreateReader()); if (xml.Document != null) { xml.Document.Validate(schemas, // Validation Event/Error Handling (sender, e) => { var message = e.Message .Replace( "element is invalid - The value '' is invalid according to its datatype 'requiredString' - The actual length is less than the MinLength value.", "cannot be blank.") .Replace( "is invalid according to its datatype 'size' - The Pattern constraint failed.", "must be numeric.") .Replace( "element is invalid", "is invalid."); errors.Add(new XElement("Error", message)); } ); } // If there were errors return them, otherwise return null return errors.Elements().Count() > 0 ? errors : null; }
source share