@Senseich

Как правильно достать значение тэга xml в C#?

Я в C# новенький, делаю пока по примерам, пытаясь модернизировать код. Но встал не пойму как правильно вытащить значение тэга cityname2 из этого файла: www.eurometeo.ru/russia/moskva/export/xml/data

Вот такой код:

string sity = @"http://www.eurometeo.ru/russia/moskva/export/xml/data/";

            string xmlData = new WebClient().DownloadString(sity);

            var xmlColItems = XDocument.Parse(xmlData);

            string text = xmlColItems.Descendants("weather")
                                  .Descendants("city")
                                  .Descendants("cityname2").ToString().Value;

            Console.WriteLine(text);


Сам тэг(элемент выводит) , а вот как значение, что то не получается. При добавление .Value выводит ошибку:
5ab2ab82b0e27779298966.jpeg

Я пока не особо понимаю, что это означает, помогите разобраться.

  • Вопрос задан
  • 433 просмотра
Пригласить эксперта
Ответы на вопрос 4
@Smilleey
Попробуйте местами поменять Value и ToString(). ToString() сама по себе преобразовывает объект в строку, дальнейшие действия над строкой не нужны.
Ответ написан
@Milton812
string sity = @"http://www.eurometeo.ru/russia/moskva/export/xml/data/";
string xmlData = new WebClient().DownloadString(sity);
var xmlColItems = XDocument.Parse(xmlData);
var query = xmlColItems.Descendants("weather").Descendants("city").Select(p => new { c = p.Element("cityname2").Value }).ToList()[0];
string text = query.c.ToString();
byte[] bytes = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(1251), Encoding.Unicode.GetBytes(text));
text = Encoding.UTF8.GetString(bytes);
Console.WriteLine(text);
Ответ написан
@lvv85
Попробуйте так:
string text = xmlColItems.Descendants("weather")
                                  .Descendants("city")
                                  .Descendants("cityname2").FirstOrDefault()?.Value;
Ответ написан
@Smiz001
C#-developer
У Вас нет свойства Value, потому что вы всегда возвращаете коллекцию XElements.
Вам либо циклом нужно пройтись по этой коллекции, либо через LINQ ее обойти и взять Value у элементов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы