// Temporary method to generate test data. //[Test] public void GenerateValidSampleXmlDocument() { var postalAddress = new PostalAddress(); postalAddress.PostalAddresses = new[] { new PostalAddressRecord { Address1 ="No. 10", Address2 = "Downing Street", Address3 = "", City = "London", Country = "UK", PostCode = "W1 1AA" }, new PostalAddressRecord { Address1 = "Andrews House" , Address2 = "College Road", Address3 = "", City = "Guildford", Country = "UK", PostCode = "GU1 4QB" } }; var serializer = new XmlSerializer(typeof(PostalAddress)); using (var fileStream = new FileStream(@"..\..\..\XmlScannerApp\Data\PostalAddressValidSample1.xml", FileMode.Create)) { serializer.Serialize(fileStream, postalAddress); } }
/// <summary> /// Detects warning messages for a given XML document based on some rules /// </summary> /// <param name="postalAddress"></param> /// <param name="result"></param> private void DetectWarnings(PostalAddress postalAddress, PostalAddressResult result) { var countryList = ConfigurationManager.AppSettings.Get("CountryList") ?? DefaultCountryList; var permittedCountries = countryList.Split(new[] { ',' }); foreach (var address in postalAddress.PostalAddresses) { string tag = null; Warning warning = null; if (string.IsNullOrEmpty(address.City)) { tag = "<city/>"; warning = new Warning() { Message = string.Format("The {0} tag is empty", tag), Tag = tag }; } else if(!permittedCountries.Contains(address.Country)) { tag = "<country/>"; warning = new Warning() { Message = string.Format("{0} isn't within permitted set of countries", address.Country.Trim()), Tag = tag }; } if (warning != null) { result.AddWarning(warning); } } }
/// <summary> /// Detects errors in an XML document during scan based on some validation rules /// </summary> /// <param name="postalAddress"></param> /// <param name="result"></param> private void DetectErrors(PostalAddress postalAddress, PostalAddressResult result) { var count = postalAddress.PostalAddresses.Count(); foreach (var address in postalAddress.PostalAddresses) { string tag = null; if (string.IsNullOrEmpty(address.Address1)) { tag = "<address1/>"; } else if (string.IsNullOrEmpty(address.PostCode)) { tag = "<postcode/>"; } if (tag != null) { //Abort scan if 10% of records in the document contain errors if (result.Errors.Count() > count / 10) { result.ExceedsErrorThreshold = true; result.SummaryMessage = "Scan aborted as more than 10% of records contained errors"; break; } var error = new Error() { Message = string.Format("The {0} tag is empty", tag), Tag = tag }; result.AddError(error); } } }