/// <summary>
        /// Populate the statement header values (by dumbly walking the TD elements).
        /// This is brittle: if eg Smile change sort code to even Sort Code, then this will break.
        /// And yet we don't want to make it case-insensitive, as that is guessing about the nature
        /// of the change - if ANYTHING changes re metadata, it should rightly break.
        /// The blocks of if/if below are because the label element is immediately followed by the 
        /// data element
        /// </summary>
        /// <param name="xml">the (now) well-formed XML document to be parsed for these header values</param>
        /// <param name="dateTime">Holds server/system date values for header purposes</param>
        public SmileStatementHeader(XDocument xml, IDateTime dateTime)
        {
            if (dateTime != null) {
             			_serverDate = dateTime.GetCurrentDateTime().ToString("yyyyMMddHHmmss");
             		}

             	// painful way to get element after sortcode, etc...
            var sortcodeCandidates = xml.Descendants("td");
            var getSortCode = false;
            var getAccountCode = false;
            var getStatementDate = false;

            foreach (var td in sortcodeCandidates) {

                if (getSortCode) {
                    _sortCode = td.Value.Trim();
                    getSortCode = false;
                }
                if (td.Value.Equals("sort code")) {
                    getSortCode = true;
                }

                if (getAccountCode) {
                    _accountCode = td.Value.Trim();
                    getAccountCode = false;
                }
                if (td.Value.Equals("account number")) {
                    getAccountCode = true;
                }

                if (getStatementDate) {
                    _statementDate = td.Value.Trim();
                    getStatementDate = false;
                }
                if (td.Value.Equals("statement date")) {
                    getStatementDate = true;
                }

                if (!td.Value.Contains("of your current account")) continue;
                var y = td.Value.IndexOf("page",StringComparison.InvariantCulture);
                var blockContainingPageNumber = td.Value.Substring(y, 30);
                AccountPageNumber = StringUtils.RemoveNonIntegerChars(blockContainingPageNumber);

            }
        }