Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 10.08.2019
Сообщений: 4

Парсинг определенной валюты из xml

09.08.2022, 20:40. Показов 1224. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет,

Имеет место xml по адресу https://www.ecb.europa.eu/stat... -daily.xml

Нужно спарсить из него для расчетов по отдельность некоторые из валют.

Пробую сделать это так (на примере USD):
C#
1
2
3
4
5
6
7
                WebClient client = new WebClient();
                var xml = client.DownloadString("https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
                XDocument xdoc = XDocument.Parse(xml);
                var el = xdoc.Element("Cube").Elements("Cube");
                string currency_off_USD = el.Where(x => x.Attribute("currency").Value == "USD").Select(x => x.Element("rate").Value).FirstOrDefault();
                double currency_off_USD1 = double.Parse(currency_off_USD);
                textBox6.Text = currency_off_USD1.ToString();
Однако выдаёт ошибку при выполнении запроса:
Code
1
System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
Помогите, пожалуйста, справиться с этой бедой
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2022, 20:40
Ответы с готовыми решениями:

Парсинг валюты
Добрый час суток! Имеется на вход такая строка : "3213.43". Вместо точки может быть любой разделитель. То,что перед точкой будут рубли,а...

Linq 2 XML : Парсинг с определенной командой
Нужно чтоб при определенном нажатием клавиши показывало строку н-р: 3 и результат mikel и <br> телефон (извините за русский) ...

Парсинг курса валюты с сайта
Нужно при помощи парсинга получить данные о валюте с сайта: https://myfin.by/currency/gomel Нужные валюты: 1. Доллар США 2. Евро 3....

10
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
09.08.2022, 21:54
Лучший ответ Сообщение было отмечено Rellicticus как решение

Решение

Rellicticus,
C#
1
2
3
4
5
6
7
8
9
10
11
using (WebClient client = new WebClient())
{
    var xml = client.DownloadString("https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
    XDocument xdoc = XDocument.Parse(xml);
    XNamespace xmlns = "http://www.ecb.int/vocabulary/2002-08-01/eurofxref";
    
    var el = xdoc.Root.Element(xmlns + "Cube").Element(xmlns + "Cube").Elements(xmlns + "Cube");
    string currency_off_USD = el.Where(x => x.Attribute("currency").Value == "USD").Select(x => x.Attribute("rate").Value).FirstOrDefault();
    double currency_off_USD1 = double.Parse(currency_off_USD, CultureInfo.InvariantCulture);
    textBox6.Text = currency_off_USD1.ToString();
}
2
0 / 0 / 0
Регистрация: 10.08.2019
Сообщений: 4
09.08.2022, 22:08  [ТС]
Спасибо. Все заработало!


По итогу у меня вышло так:

Добавил:
C#
1
using System.Globalization;
После чего заработал:
C#
1
2
3
4
5
6
7
8
                WebClient client = new WebClient();
                var xml = client.DownloadString("https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
                XDocument xdoc = XDocument.Parse(xml);
                XNamespace xmlns = "http://www.ecb.int/vocabulary/2002-08-01/eurofxref";
                var el = xdoc.Root.Element(xmlns + "Cube").Element(xmlns + "Cube").Elements(xmlns + "Cube");
                string currency_off_USD = el.Where(x => x.Attribute("currency").Value == "TRY").Select(x => x.Attribute("rate").Value).FirstOrDefault();
                double currency_off_USD1 = double.Parse(currency_off_USD, CultureInfo.InvariantCulture);
                textBox6.Text = currency_off_USD1.ToString();
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
10.08.2022, 00:19
Rellicticus, почему вы using убрали?
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
10.08.2022, 05:17
Цитата Сообщение от OwenGlendower Посмотреть сообщение
почему вы using убрали
Потому что не знает что такое утечки памяти.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
10.08.2022, 12:21
Andreyip, а тут будет утечка памяти без using?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.08.2022, 13:01
Мне кажется, такие вещи намного "чище" получаются через XPath:
C#
1
2
3
4
5
6
var xml = XDocument.Load("https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
var xmlns = new XmlNamespaceManager(new NameTable());
xmlns.AddNamespace("c", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
 
var cube = xml.XPathSelectElement("//c:Cube[@currency='USD']", xmlns);
var rate = (decimal?) cube?.Attribute("rate");
2
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
10.08.2022, 14:10
OwenGlendower, Может будет, может не будет, если интерфейс IDisposable прикручен значит есть ресурсы которые должны быть освобождены после работы. С учетом того что у него WebClient создается на запрос, значит после этого ресурсы остаются болтаться в памяти.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
10.08.2022, 14:12
Andreyip, а финализаторы на что?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.08.2022, 15:15
Цитата Сообщение от Andreyip Посмотреть сообщение
если интерфейс IDisposable прикручен значит есть ресурсы которые должны быть освобождены после работы.
Это не всегда так.
Например, Task реализует IDisposable, но никто же не диспозит ее после каждого await (да оно и не надо, за очень редкими исключениями).

Цитата Сообщение от Andreyip Посмотреть сообщение
значит после этого ресурсы остаются болтаться в памяти.
Не обязательно.
Насколько я могу судить, в данном случае его вызывать не надо, т.к. экземпляр не делает ничего, что выделяло бы неуправляемые ресурсы.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
а финализаторы на что?
Для меня такие аргументы — это равносильно оставлению подноса с объедками на столике в местах общепита и неиспользованию смыва в общественных туалетах — там, мол, есть сотрудники, которым платят за уборку.
Попользовался ресурсом — освободи/подготовь его для следующего товарища, чтобы ему не пришлось ждать уборщика.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
10.08.2022, 15:26
Цитата Сообщение от kolorotur Посмотреть сообщение
Для меня такие аргументы — это равносильно оставлению подноса с объедками ...
Для меня тоже. Здесь суть в другом. Термин "утечка памяти" в данном случае неудачно используется на мой взгляд. Я к этому пытался подвести.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2022, 15:26
Помогаю со студенческими работами здесь

Как ускорить парсинг курса валюты из ответа сайта, с помощью асинхронизации?
Как ускорить парсинг курса валюты, с помощью асинхронизации? private String USD() { System.Net.WebClient wc = new...

Обмен данными XML. Загрузка валюты догвора
Доброго времени! Прошу помочь, проблема в казалось бы элементарной вещи.. Есть две базы Бухгалтерии, из одной в другую нужно выгружать...

Получить курс валюты на заданную дату используя xml
Всем привет! ЦБР предоставляет возможность получить курс валюты на заданную дату используя xml. Нашла примеры, не понимаю, как...

Сложный парсинг XML через Retrofit SimpleXml-Converter Simple XML
Разбираюсь потиху, есть 2 вопроса. 1. Нужно ли всегда using Retrofit SimpleXml-Converter Simple XML парсить все элементы? 2. Есть...

Парсинг XML-файла с помощью LINQ to XML
Здрасивуйте. Трабл никак не могу понять в чем дело не могу считать инфу с XML login, getWorkersOUs надо записать в textBox а все c...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru