Парсинг файла XML - C#

Узнай цену своей работы

Формулировка задачи:

Помогите разобраться с парсингом файла XML. На входе есть XML-файл:
Листинг программы
  1. <weatherdata>
  2. <location>
  3. <name>London</name>
  4. <type/>
  5. <country>GB</country>
  6. <timezone/>
  7. <location altitude="0" latitude="51.50853" longitude="-0.12574" geobase="geonames" geobaseid="2643743"/>
  8. </location>
  9. <credit/>
  10. <meta>
  11. <lastupdate/>
  12. <calctime>0.0102</calctime>
  13. <nextupdate/>
  14. </meta>
  15. <sun rise="2016-02-17T07:10:09" set="2016-02-17T17:19:37"/>
  16. <forecast>
  17. <time day="2016-02-17">
  18. <symbol number="501" name="moderate rain" var="10d"/>
  19. <precipitation value="6.82" type="rain"/>
  20. <windDirection deg="184" code="S" name="South"/>
  21. <windSpeed mps="4.47" name="Gentle Breeze"/>
  22. <temperature day="4.53" min="2.66" max="4.53" night="2.73" eve="4.53" morn="4.53"/>
  23. <pressure unit="hPa" value="1017.35"/>
  24. <humidity value="85" unit="%"/>
  25. <clouds value="overcast clouds" all="92" unit="%"/>
  26. </time>
  27. </forecast>
  28. </weatherdata>
Надо из него распарсить значения. Есть метод, но не получается вытянуть город (City).
Листинг программы
  1. public static async Task<List<WeatherModel>> GetWeather(string city)
  2. {
  3. string url =$"http://api.openweathermap.org/data/2.5/forecast/daily?q={city}&type=accurate&mode=xml&units=metric&cnt=1&appid={AppID}";
  4. using (HttpClient client = new HttpClient())
  5. {
  6. string rezult = await client.GetStringAsync(url);
  7. XElement xEl = XElement.Load(new System.IO.StringReader(rezult));
  8. IEnumerable<WeatherModel> weather = xmlElement.Descendants("time").Select((element) =>
  9. new WeatherModel
  10. {
  11. Day = element.Attribute("day").Value,
  12. DayOfWeek = DayOfWeekFill(element),
  13. WeatherName = element.Element("symbol").Attribute("name").Value,
  14. WindDirectionName = element.Element("windDirection").Attribute("name").Value,
  15. WindSpeedMps = element.Element("windSpeed").Attribute("mps").Value + "mps",
  16. TemperatureDay = element.Element("temperature").Attribute("day").Value + "°",
  17. TemperatureNight = element.Element("temperature").Attribute("night").Value + "°",
  18. TemperatureMorning = element.Element("temperature").Attribute("morn").Value + "°",
  19. MaxTemperature = element.Element("temperature").Attribute("max").Value + "°",
  20. MinTemperature = element.Element("temperature").Attribute("min").Value + "°",
  21. Humidity = element.Element("humidity").Attribute("value").Value + "%"
  22. //WeatherPicture = WeatherPictureFill(el),
  23. });
  24. return weather.ToList();
  25. }
  26. }
Какой метод XElement нужно использовать, чтобы достучаться ко всем данным?

Решение задачи: «Парсинг файла XML»

textual
Листинг программы
  1.                         XDocument document = XDocument.Parse(rezult);
  2.                         XElement weatherElements = document.Element("weatherdata");
  3.                 IEnumerable<XElement> el = weatherElements.DescendantsAndSelf("weatherdata");
  4.                 weatherList = (from itm in el
  5.                                select new WeatherModel()
  6.                                {
  7.                                    City = itm.Element("location").Element("name").Value,
  8.                                    Day = itm.Element("forecast").Element("time").Attribute("day").Value,
  9.                                    WeatherName = itm.Element("forecast").Element("time").Element("symbol").Attribute("name").Value,
  10.                                    WindDirectionName = itm.Element("forecast").Element("time").Element("windDirection").Attribute("name").Value,
  11.                                    WindSpeedMps = "Wind Speed\n" + itm.Element("forecast").Element("time").Element("windSpeed").Attribute("mps").Value + "mps",
  12.                                    TemperatureDay = itm.Element("forecast").Element("time").Element("temperature").Attribute("day").Value + "°",
  13.                                    TemperatureNight = itm.Element("forecast").Element("time").Element("temperature").Attribute("night").Value + "°",
  14.                                    TemperatureMorning = itm.Element("forecast").Element("time").Element("temperature").Attribute("morn").Value + "°",
  15.                                    Humidity = "Humidity\n" + itm.Element("forecast").Element("time").Element("humidity").Attribute("value").Value + "%",
  16.                                    WeatherPicture = itm.Element("forecast").Element("time").Element("symbol").Attribute("name").Value;
  17.                                }).ToList();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут