public static bool ValidateElement( XmlSchemaElement element, object value, SchemaValidationResult errors )
{
bool isValid = true;
XmlSchemaType schemaType = element.ElementSchemaType;
bool isNillable = element.IsNillable;
string defaultValue = element.DefaultValue;
decimal minOccurrs = element.MinOccurs;
decimal maxOccurrs = element.MaxOccurs;
//SchemaValidationResult errors = new SchemaValidationResult(element.Name );
var complexType = schemaType as XmlSchemaComplexType;
var simpleType = schemaType as XmlSchemaSimpleType;
if (minOccurrs > 0 && value == null && !isNillable)
{
isValid = false;
errors.AddError( string.Format( "{0} cannot be null", element.Name ) );
}
else if (complexType != null)
{
var collection = value as ICollection;
if (collection != null)
{
XmlSchemaParticle contentTypeParticle = complexType.ContentTypeParticle;
XmlSchemaParticle particle = complexType.Particle;
XmlSchemaContentModel model = complexType.ContentModel;
var sequence = particle as XmlSchemaSequence;
if (sequence != null)
{
ProcessSequence( errors, sequence, collection, minOccurrs );
}
}
}
else if (simpleType != null)
{
var union = simpleType.Content as XmlSchemaSimpleTypeUnion;
var list = simpleType.Content as XmlSchemaSimpleTypeList;
var restriction = simpleType.Content as XmlSchemaSimpleTypeRestriction;
if (restriction != null)
{
XmlQualifiedName qname = simpleType.BaseXmlSchemaType.QualifiedName;
String typeName = qname.Name;
isValid &= ProcessRestrictions( value == null ? null : value.ToString(), errors, restriction,
typeName, simpleType.Name );
}
foreach (XmlSchemaObject contraint in element.Constraints)
{
var key = contraint as XmlSchemaKey;
var keyRef = contraint as XmlSchemaKeyref;
var unique = contraint as XmlSchemaUnique;
if (key != null)
{
}
if (keyRef != null)
{
}
if (unique != null)
{
}
}
}
XmlTypeCode tc = schemaType.TypeCode;
//validationResult.AddResult( errors );
return isValid;
}