public override IEnumerable<ValidationResult> Validate(System.Xml.Linq.XElement input)
 {
     if (null == input)
         throw new ArgumentNullException("input");
     IEnumerable<ValidationResult> r = null;
     this.Validate
         (
         (input.XPathEvaluate(this.XPathSelector, this.NamespaceManager) as System.Collections.IEnumerable).Cast<XObject>(),
         out r
         );
     return r;
 }
 public override IEnumerable<ValidationResult> Validate(System.Xml.Linq.XElement input)
 {
     if (null == input)
         throw new ArgumentNullException("input");
     var elements = (input.XPathEvaluate(this.XPathSelector, this.NamespaceManager) as System.Collections.IEnumerable).Cast<XElement>();
     this.Logs.Log(Logging.LogCategory.TimingInformation, String.Format("Total matching elements: {0}", elements.Count()));
     var distinctValues = (from v in
                               elements
                           group v by v.Value into grouped
                           select new
                           {
                               value = grouped.Key,
                               Count = grouped.Count()
                           }).Where(g => g.Count > 1).Select(g => g.value);
     this.Logs.Log(Logging.LogCategory.TimingInformation, String.Format("There are {0} distinct values", distinctValues.Count()));
     //var filteredElements = elements.Where(e => distinctValues.Contains(e.Value));
     var filteredElements = new List<XElement>();
     foreach (var value in distinctValues)
     {
         filteredElements.AddRange((input.XPathEvaluate(this.XPathSelector + "[text()='" + value.Replace("'", "&quot;") + "']", this.NamespaceManager) as System.Collections.IEnumerable).Cast<XElement>());
     }
     this.Logs.Log(Logging.LogCategory.TimingInformation, String.Format("Filtered elements: {0}", filteredElements.Count()));
     IEnumerable<ValidationResult> r = null;
     //this.Validate(input.XPathSelectElements(this.XPathSelector, this.NamespaceManager), out r);
     this.Validate
         (
         filteredElements,
         out r
         );
     return r;
 }
 public override IEnumerable<ValidationResult> Validate(System.Xml.Linq.XElement input)
 {
     if (null == input)
         throw new ArgumentNullException("input");
     string value = input.XPathEvaluate(this.XPathSelector, this.NamespaceManager).ToString();
     var r = new ValidationResult()
     {
         Exception = new ContentValidation.ValidationException(this.ExceptionMessage, this.FailedValidationStatus),
         Message = this.ExceptionMessage,
         ValidationGroup = this.ValidationGroup,
         FurtherInformation = this.FurtherInformation
     };
     string details = String.Empty;
     if (false == this.PassesValidation(value, out details))
     {
         var vi = new ValidationInstance()
         {
             Details = String.IsNullOrEmpty(details) ? String.Empty : details,
             Status = this.FailedValidationStatus
         };
         if (input is IXmlLineInfo)
         {
             vi.LineNumber = (input as IXmlLineInfo).LineNumber;
             vi.LinePosition= (input as IXmlLineInfo).LinePosition;
         }
         r.Instances.Add(vi);
     }
     else
     {
         var vi = new ValidationInstance()
         {
             Status = ValidationStatus.Passed
         };
         r.Instances.Add(vi);
     }
     return new ValidationResult[] { r };
 }