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