Пример #1
0
        /// <summary>
        /// Получить кокнертный XPath путем замены переменной части на конкретное значение.
        /// </summary>
        /// <param name="xPathesDto">XPath адрес.</param>
        /// <param name="OldSubString">Переменная часть XPath адреса</param>
        /// <param name="NewSubString">Значение переменной части XPath адреса</param>
        /// <returns></returns>
        private CurrencyXPathesDto GetActualXpath(CurrencyXPathesDto xPathesDto, string OldSubString, string NewSubString)
        {
            var NewXpathes = new CurrencyXPathesDto
            {
                ExchangeRate = xPathesDto.ExchangeRate.Replace(OldSubString, NewSubString),
                TextCode     = xPathesDto.TextCode.Replace(OldSubString, NewSubString),
                Unit         = xPathesDto.Unit.Replace(OldSubString, NewSubString)
            };

            return(NewXpathes);
        }
Пример #2
0
        /// <summary>
        /// Получить данные одной валюты.
        /// </summary>
        /// <param name="html">Страница для поиска валюты.</param>
        /// <param name="pathes">Адреса XPath.</param>
        /// <returns></returns>
        private CurrencyDataDto GetCurrencyData(HtmlDocument html,
                                                BankRequestDto request,
                                                int rowNum,
                                                WordProcessingHandler unitProcess,
                                                WordProcessingHandler textcodeProcess)
        {
            // Данные валюты.
            var currencyData = new CurrencyDataDto();

            // Установить переменную часть XPath адреса.
            var pathes = new CurrencyXPathesDto();

            try
            {
                pathes = GetActualXpath(request.XPathes, request.VariablePartOfXpath, rowNum.ToString());
            }
            catch (Exception e)
            {
                currencyData.RequestResultStatus  = ProcessingResultDto.ResultType.Error;
                currencyData.RequestResultMessage = $"Ошибка при получении уточненного адреса XPath: {e.Message}";
                return(currencyData);
            }


            // Установить разделитель разрядов и десятичной части.
            var formatInfo = new NumberFormatInfo
            {
                NumberDecimalSeparator = request.NumberDecimalSeparator,
                NumberGroupSeparator   = request.NumberGroupSeparator
            };

            // Получить значения данных для валюты со страницы через XPath.
            try
            {
                // Получить значения по адресу XPath
                string textCode     = GetValueByXPath(html, pathes.TextCode);
                string exchangeRate = GetValueByXPath(html, pathes.ExchangeRate);
                string unit         = GetValueByXPath(html, pathes.Unit);

                // Выделить из строки необходимый текст.
                unit     = unitProcess(unit);
                textCode = textcodeProcess(textCode);

                // Конвертация строки в число (обменный курс).
                currencyData.RequestResultStatus = ProcessingResultDto.ResultType.Success;
                if (decimal.TryParse(exchangeRate, NumberStyles.Currency, formatInfo, out decimal exchangeRateResult))
                {
                    currencyData.ExchangeRateValue = exchangeRateResult;
                }
                else
                {
                    currencyData.ExchangeRateValue     = 0;
                    currencyData.RequestResultStatus   = ProcessingResultDto.ResultType.Error;
                    currencyData.RequestResultMessage += "Ошибка при конвертации зачения обменного курса (ExchangeRate). ";
                }

                // Конвертация строки в число (единица измерения).
                if (int.TryParse(unit, out int unitResult))
                {
                    currencyData.Unit = unitResult;
                }
                else
                {
                    currencyData.Unit = 0;
                    currencyData.RequestResultStatus   = ProcessingResultDto.ResultType.Error;
                    currencyData.RequestResultMessage += "Ошибка при конвертации зачения единицы измерения валюты (Unit). ";
                }

                currencyData.TextCode = textCode;
            }
            catch (FormatException e)
            {
                currencyData.RequestResultStatus  = ProcessingResultDto.ResultType.Error;
                currencyData.RequestResultMessage = e.Message;
            }
            catch (ArgumentNullException e)
            {
                currencyData.RequestResultStatus  = ProcessingResultDto.ResultType.Error;
                currencyData.RequestResultMessage = e.ParamName;
            }
            return(currencyData);
        }