// 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);
                }
            }
        }