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("'", """) + "']", 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 }; }