Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 2
1

Парсинг файла XML

17.02.2016, 22:50. Показов 2532. Ответов 9
Метки xml (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться с парсингом файла XML.

На входе есть XML-файл:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<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>
Надо из него распарсить значения.

Есть метод, но не получается вытянуть город (City).

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        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();
 
                }
}
Какой метод XElement нужно использовать, чтобы достучаться ко всем данным?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2016, 22:50
Ответы с готовыми решениями:

Парсинг XML файла
Собственно есть XML файл такого вида. Надо получить все параметры. К сожалению для меня парсинг XML...

Парсинг XML файла конфигурации
Добрый вечер... Обыскал все интернет, но так и не нашел нормальной реализации парсинга файла...

Парсинг xml файла в кодировке ISO-8859-1
Всем привет. Уже второй час бьюсь никак не могу нормально спарсить xml-файл. Кодировка xml файла -...

Чтение XML файла и его парсинг для получения всех URL
Добрый день! Из интернета получаю XML данные - &lt;response list=&quot;true&quot;&gt; - &lt;audio&gt; ...

9
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
18.02.2016, 13:04 2
Откуда не получается достать город? если их xml так там нету его, если из запроса, то тогда не понятно причём тут xml.
В xml есть нода name как понимаю там храниться город её и нужно искать.
Из поставленного вопроса таков ответ, немного не понятен общий замысел в вопросе.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,662
Записей в блоге: 14
18.02.2016, 13:18 3
Имя выше по нодам хранится. Разбирать документ надо с начала.
0
0 / 0 / 2
Регистрация: 18.02.2016
Сообщений: 8
19.02.2016, 10:50 4
Чтобы не создавать новую тему. То же самое не могу понять как парсить такой xml.
XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
    <gesmes:subject>Reference rates</gesmes:subject>
    <gesmes:Sender>
        <gesmes:name>European Central Bank</gesmes:name>
    </gesmes:Sender>
    <Cube>
        <Cube time='2016-02-15'>
            <Cube currency='USD' rate='1.1180'/>
            <Cube currency='JPY' rate='127.60'/>
            <Cube currency='BGN' rate='1.9558'/>
Надо вытащить данные к примеру для 'USD' цена такая-то. Вроде все просто, но не пойму как это сделать.
Что-то похожее
C#
1
2
3
4
5
6
xmlFromECB.Load("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
foreach (XmlNode node in xmlFromECB.DocumentElement)
                {
                    if (node.Attributes.GetNamedItem("currency").Value == "'USD'")
                        double curr =Convert.ToDouble(node.Attributes.GetNamedItem("rate").Value);
                }
Но не работает. Как это легче реализовать?

Добавлено через 17 часов 10 минут
Тут вообще ничего не происходит. Уже третий день не могу понять как вытащить атрибуты из xml файла. Жесть.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
try
            {
                string xmlPath = Application.StartupPath + "\\MyDB\\eurofxref-daily.xml"; //путь к файлу
                //xmlFromECB = XDocument.Load("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
                xmlFromECB = XDocument.Load(xmlPath);
                //<Cube currency='CAD' rate='1.5454'/>
                xmlFromECB.Descendants("Cube").Select(p => new
                {
                    curr = p.Attribute("currency").Value
                }).ToList().ForEach(p =>
                {
                    label1.Text +="!!" + p.curr;
                }
 
                    );
                
                
            }
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,662
Записей в блоге: 14
19.02.2016, 10:52 5
jo2button, попробуйте чисто для теста удалить все namespace из файла.
1
22 / 22 / 13
Регистрация: 11.08.2015
Сообщений: 69
19.02.2016, 10:58 6
C#
1
2
var xml = XDocument.Load("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
            var docum = xml.Descendants().Select(r => new {a= r.Attribute("currency")?.Value,b= r.Attribute("rate")?.Value }).ToList();
0
0 / 0 / 2
Регистрация: 18.02.2016
Сообщений: 8
20.02.2016, 07:46 7
Я только начинаю программировать, не могли бы вы разъяснить. var docum у нас это List<r>? ,
можно записать
C#
1
List<object> docum = xml.Descendants().Select(r => new {a= r.Attribute("currency").Value,b= r.Attribute("rate").Value }).ToList();
где r - ссылка на объект, который содержит переменные a и b ? Или нет? Просто не пойму как вытащить эти a и b.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,662
Записей в блоге: 14
20.02.2016, 09:40 8
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
var xml = XDocument.Load("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
var docum = xml.Descendants()
    .Where(r => !String.IsNullOrEmpty((string)r.Attribute("currency")))
    .Select(r => new
    {
        a = (string)r.Attribute("currency"),
        b = (string)r.Attribute("rate")
    });
 
foreach (var pair in docum)
{
    Console.WriteLine("{0} : {1}", pair.a, pair.b);
}
1
0 / 0 / 2
Регистрация: 18.02.2016
Сообщений: 8
20.02.2016, 15:07 9
Спасибо огромное! Работает!
0
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 2
20.02.2016, 17:07  [ТС] 10
Я реализовала в итоге вот так. Но правильно ли - незнаю.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                        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();
0
20.02.2016, 17:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2016, 17:07
Помогаю со студенческими работами здесь

Парсинг XML
&lt;SpellResult&gt; &lt;error code=&quot;1&quot; pos=&quot;0&quot; row=&quot;0&quot; col=&quot;0&quot; len=&quot;6&quot;&gt; &lt;word&gt;1&lt;/word&gt; ...

Парсинг XML
Подскажите получаю ответ от сервера в формате XML. Примерно такого содержания &quot; &quot;&lt;?xml...

Парсинг XML
Подскажите пожалуйста на подобную тему. Имеется XML-строка &lt;?xml version=&quot;1.0&quot;...

Парсинг Xml
Добрый день. Помогите распарсить Xml документ. Это справочник ОКПД. Весь Xml во вложения не...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru