Xml Validation Helper : Schema « XML « C# / C Sharp






Xml Validation Helper

  
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
using System.Xml.Serialization;
using System.Reflection;
using System.Diagnostics;

namespace A4G.Utils.Xml
{
  public class XmlValidationHelper
  {
    private ValidationEventHandler _validationEventHandler;

    public XmlValidationHelper(string xsdPath, string nameSpace)
      : this(new string[] { xsdPath }, new string[] {nameSpace})
    {
    }

    public XmlValidationHelper(string[] xsdPaths, string[] nameSpaces)
    {
      //ArgumentAsserter.AssertIsNotNull(xsdPaths, "xsdPaths");
      //ArgumentAsserter.AssertIsNotNull(nameSpaces, "nameSpaces");
      //ArgumentAsserter.AssertIsTrue(xsdPaths.Length > 0, "xsdPaths.Length > 0");
      //ArgumentAsserter.AssertAreEqual(xsdPaths.Length, nameSpaces.Length,
      //    "xsdPaths.Length", "nameSpace.Length");

      _validationEventHandler = new ValidationEventHandler(ValidationCallback);

      _schemaSet = new XmlSchemaSet();
      for (int i = 0; i < xsdPaths.Length; i++)
      {
        _schemaSet.Add(nameSpaces[i], xsdPaths[i]);
      }
    }

    public XmlValidationHelper(XmlSchemaSet schemaSet)
    {
      _validationEventHandler = new ValidationEventHandler(ValidationCallback);
      _schemaSet = schemaSet;
    }

    private readonly XmlSchemaSet _schemaSet;
    public XmlSchemaSet SchemaSet
    {
      get
      {
        return _schemaSet;
      }
    }

    private readonly List<Exception> _errors = new List<Exception>();
    private List<Exception> Errors
    {
      get
      {
        return _errors;
      }
    }

    public Exception[] GetErrors()
    {
      return Errors.ToArray();
    }

    private readonly List<Exception> _warnings = new List<Exception>();
    private List<Exception> Warnings
    {
      get
      {
        return _warnings;
      }
    }

    public Exception[] GetWarnings()
    {
      return Warnings.ToArray();
    }

    public void Validate(string xmlFile)
    {
      XmlReader xmlReader = new XmlTextReader(xmlFile);
      Validate(xmlReader);
      xmlReader.Close();
    }

    public void Validate(byte[] bytes)
    {
      MemoryStream xmlStream = new MemoryStream(bytes);
      try
      {
        Validate(xmlStream);
      }
      finally
      {
        xmlStream.Close();
      }
    }

    public void Validate(Stream xmlStream)
    {
      XmlReader xmlReader = new XmlTextReader(xmlStream);
      try
      {
        Validate(xmlReader);
      }
      finally
      {
        xmlReader.Close();
      }
    }

    public void Validate(XmlReader xmlReader)
    {
      Errors.Clear();
      Warnings.Clear();

      XmlReaderSettings settings = new XmlReaderSettings();
      settings.ValidationEventHandler += _validationEventHandler;
      settings.ValidationType = ValidationType.Schema;
      settings.Schemas = SchemaSet;

      XmlReader validatingReader = XmlReader.Create(xmlReader, settings);
      try
      {
        while (validatingReader.Read()) ;
      }
      catch (Exception e)
      {
        _errors.Add(e);
      }
      finally
      {
        validatingReader.Close();
      }

#if DEBUG
      Debug.WriteLine("Xml Validation Warnings:");
      if (Warnings.Count == 0)
      {
        Debug.WriteLine("- None");
      }

      foreach (Exception warning in Warnings)
      {
        XmlSchemaException xmlError = warning as XmlSchemaException;
        if (xmlError != null)
        {
          Debug.WriteLine(string.Format(
            "Line {0}, position {1}: {2}",
            xmlError.LineNumber,
            xmlError.LinePosition,
            xmlError.Message));
        }
        else
        {
          Debug.WriteLine(warning.ToString());
        }
      }

      Debug.WriteLine("Xml Validation Errors");
      if (Errors.Count == 0)
      {
        Debug.WriteLine("- None");
      }

      foreach (Exception error in Errors)
      {
        XmlSchemaException xmlError = error as XmlSchemaException;
        if (xmlError != null)
        {
          Debug.WriteLine(string.Format(
            "Line {0}, position {1}: {2}",
            xmlError.LineNumber,
            xmlError.LinePosition,
            xmlError.Message));
        }
        else
        {
          Debug.WriteLine(error.ToString());
        }
      }
#endif
    }

    private void ValidationCallback(object sender, ValidationEventArgs args)
    {
      switch (args.Severity)
      {
        case XmlSeverityType.Warning:
        {
          _warnings.Add(args.Exception);
          break;
        }
        case XmlSeverityType.Error:
        {
          _errors.Add(args.Exception);
          break;
        }
      }
    }
  }
}

   
    
  








Related examples in the same category

1.Set XmlReaderSettings
2.Choose ValidationType
3.Validate an XML Document Against a Schema
4.Validate Schema
5.Use XML schema to validate XML documents
6.Use XmlReaderSettings to validate the Xml document
7.Strip Non Valid XML Characters.
8.Is Well Formed Xml
9.XmlSchema is an in-memory representation of an XML Schema
10.Is Xml Valid
11.Get Intrinsic Simple Types Names from System.Xml.Schema.DatatypeImplementation
12.Reads a XML schema file and returns the information found in that.
13.XML reading functionality