Разбор XML файла - C#
Формулировка задачи:
Доброго времени суток! Имеется очень большой XML файл вот такого вида (я укоротил его)
Как получить значения success и startDatetime из ПОСЛЕДНЕГО узла RunState (с самой свежей датой)? Самого нижнего. Второй день уже изучаю xml науку и, честно говоря, уже запутался...
<?xml version="1.0" encoding="windows-1251"?>
<AutoAuditState>
<ImportScenario id="ImpBezen">
<RunState success="0" startDatetime="18 января 2017 г. 2:00:19" packetFileName="D:\_AuditLocal\Archive\2017_01_17_23_00\ExpADS2017_01_17_23_00.xml" logFileName="D:\_AuditLocal\Archive\2017_01_17_23_00\ExpADS2017_01_17_23_00_import.log" stopDatetime="18 января 2017 г. 2:00:57">В процессе импорта обработано: 1378 записей таблицы аудита, 1 семантических записей, 213 графических объектов.
Произошло: 0 предупреждений, 0 ошибок, 0 критических ошибок.
Импорт длился 00:00:34.</RunState>
<RunState success="1" startDatetime="19 января 2017 г. 2:00:16" packetFileName="D:\_AuditLocal\Archive\2017_01_18_08_35\ExpADS2017_01_18_08_35.xml" logFileName="D:\_AuditLocal\Archive\2017_01_18_08_35\ExpADS2017_01_18_08_35_import.log" stopDatetime="19 января 2017 г. 2:00:22">В процессе импорта обработано: 11 записей таблицы аудита, 0 семантических записей, 0 графических объектов.
Произошло: 0 предупреждений, 0 ошибок, 0 критических ошибок.
Импорт длился 00:00:04.</RunState>
<RunState success="1" startDatetime="19 января 2017 г. 2:00:22" packetFileName="D:\_AuditLocal\Archive\2017_01_18_23_00\ExpADS2017_01_18_23_00.xml" logFileName="D:\_AuditLocal\Archive\2017_01_18_23_00\ExpADS2017_01_18_23_00_import.log" stopDatetime="19 января 2017 г. 2:00:50">В процессе импорта обработано: 1088 записей таблицы аудита, 0 семантических записей, 146 графических объектов.
Произошло: 0 предупреждений, 0 ошибок, 0 критических ошибок.
Импорт длился 00:00:24.</RunState></ImportScenario>
</AutoAuditState>
Решение задачи: «Разбор XML файла»
textual
Листинг программы
var success = XDocument.Load("d://file.xml")
.Descendants("RunState")
.Select(s =>
new
{
startDate = DateTime.Parse(s.Attribute("startDatetime").Value),
success = s.Attribute("success").Value
})
.OrderByDescending(s => s.startDate)
.First().success;