ATMLSchemaLibrary.managers.SchemaManager.ValidateXml C# (CSharp) Method

ValidateXml() public static method

public static ValidateXml ( string xml, string targetNamespace, StringBuilder sb ) : bool
xml string
targetNamespace string
sb StringBuilder
return bool
        public static bool ValidateXml( string xml, string targetNamespace, StringBuilder sb )
        {
            _validationErrors.Clear();

            //---------------------------------------------------------------//
            //--- TODO: Convert to xml and use XSLT to format for display ---//
            //---------------------------------------------------------------//
            string byteOrderMarkUtf8 = Encoding.UTF8.GetString( Encoding.UTF8.GetPreamble() );
            if (xml.StartsWith( byteOrderMarkUtf8 ))
                xml = xml.Remove( 0, byteOrderMarkUtf8.Length );

            sb.Append(
                "<h3 style=\"font-family:sans-serif;\" >The ATML XML has FAILED a standard validation against the specification XSD with the following errors: </h3>" );
            //error = null;
            bool validXml = true;
            try
            {
                var reader = new StringReader( xml );
                var settings = new XmlReaderSettings();
                settings.DtdProcessing = DtdProcessing.Parse;
                settings.ValidationType = ValidationType.Schema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessIdentityConstraints;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
                settings.ValidationEventHandler += settings_ValidationEventHandler;

                XmlReader xr = XmlReader.Create( reader, settings );
                XDocument document = XDocument.Load( xr );
                if (!Instance._schemaSets.ContainsKey( targetNamespace ))
                {
                    string msg = string.Format( "<strong>Namespace \"{0}\" does not belong to the current schema set and therefore cannot be validated at this time.</strong>", targetNamespace );
                    throw new Exception( msg );
                }
                else
                {
                    XmlSchemaSet ss = Instance._schemaSets[targetNamespace];
                    var errors = new List<string>();

                    document.Validate( ss, ( o, err ) =>
                                           {
                                               var name =
                                                   new StringBuilder( "<strong><span style=\"font-family:sans-serif;\">" );
                                               var element = o as XElement;
                                               var attribute = o as XAttribute;
                                               if (attribute != null)
                                               {
                                                   element = attribute.Parent;
                                               }
                                               if (element != null)
                                               {
                                                   int indent = BuildParentTree( element, name );
                                                   name.Append( "</span></strong>" );
                                                   sb.Append( "<br/>" );
                                                   sb.Append( "<div style=\"border:black solid 1px;padding:5px;\">" );
                                                   sb.Append( name );
                                                   sb.Append( "<br/>" )
                                                     .Append(
                                                         "<div style=\"color:red;font-family:sans-serif;padding-left:" )
                                                     .Append( 20*indent )
                                                     .Append( "px;\">" );
                                                   sb.Append( err.Message ).Append( "</div><br/><br/>" );
                                                   errors.Add( sb.ToString() );
                                                   if (err.Severity == XmlSeverityType.Error)
                                                       Instance.OnError( err.Message, null );
                                                   if (err.Severity == XmlSeverityType.Warning)
                                                       Instance.OnWarning( err.Message, null );
                                                   validXml = false;
                                                   sb.Append( "</div>" );
                                               }
                                               else
                                               {
                                                   int i = 0;
                                               }
                                           }, true );
                }
            }
            catch (Exception e)
            {
                validXml = false;
                try
                {
                    Instance.OnError( e.Message, sb.ToString() );
                    sb.Append( e.Message + "<br/><pre>" + e.StackTrace + "</pre>" );
                }
                catch (Exception ee)
                {
                    sb.Append( "An error occurred while processing a validation error<br/>" + ee.Message + "<br/>" );
                }
            }

            if (!validXml)
            {
                try
                {
                    //error = sb.ToString();
                }
                catch (Exception)
                {
                    MessageBox.Show( string.Format( "Failed to retrieve validation error message - size:{0}", sb.Length ) );
                }
            }

            if (_validationErrors.Length > 0)
            {
                validXml = false;
                sb.Append( _validationErrors );
            }

            return validXml;
        }