.NET 4.x Linq to XML парсинг - C#
Формулировка задачи:
Доброе утро, подскажите пожалуйста по Linq:
Опечатка не List<Client> а List<Student>
Есть файл XML:
<?xml version="1.0" encoding="Windows-1251"?> <СтудентИнфо> <Инфо> <Экзамен Допуск="Да"> <ИД>1</ИД> <ФИО> <Фамилия>Петров</Фамилия> <Имя>Николай</Имя> <Отчество>Васильевич</Отчество> </ФИО> <ДатаРождения>15.06.1996</ДатаРождения> <Дисциплина> <Аудитория>245</Аудитория> <ДатаЗанятия>25.12.2017</ДатаЗанятия> </Дисциплина> <Дисциплина> <Аудитория>244</Аудитория> <ДатаЗанятия>09.12.2017</ДатаЗанятия> </Дисциплина> </Экзамен> </Инфо> </СтудентИнфо>
Делаю обход запросом:
Student.Studentlist = (from stu in xstu.Element("СтудентИнфо").Element("Инфо").Elements("Экзамен") select new Student() { ID = Convert.ToInt16( stu.Element("ИД").Value), FName = stu.Element("ФИО").Element("Фамилия").Value, LName = stu.Element("ФИО").Element("Имя").Value, MName = stu.Element("ФИО").Element("Отчество").Value, Dob = stu.Element("ДатаРождения").Value, NumRoom = stu.Element("Дисциплина").Element("Аудитория").Value, }).ToList<Student>(); foreach (var item in Student.Studentlist) Console.WriteLine("{0} {1} {2} {3} {4} {5}", item.ID, item.FName, item.LName, item.MName, item.Dob, item.NumRoom);
Модель:
public class Student { public int ID { get; set; } public string FName { get; set; } public string LName { get; set; } public string MName { get; set; } public string Dob { get; set; } public string NumRoom { get; set; } } public class StudentInfo { public List<Client> Studentlist { get; set; } public StudentInfo() { Studentlist = new List<Student>(); } }
Выводится только одна дисциплина
<Дисциплина> <Аудитория>245</Аудитория> <ДатаЗанятия>25.12.2017</ДатаЗанятия> </Дисциплина>
Делаю запрос:
Student.Studentlist = (from stu in xstu.Descendants("Дисциплина") select new Student() { NumRoom = stu.Value, }).ToList<Student>(); foreach (var item in Student.Studentlist) Console.WriteLine("{0}", item.NumRoom);
Выводятся две дисциплины
.Вопрос:
1.Как вывести все элементы данного XML в одном запросе и добавить их в список? 2.Если не получится, то как связать дисциплины со студентами по ИД?
public List<Client> Studentlist { get; set; }
Решение задачи: «.NET 4.x Linq to XML парсинг»
textual
Листинг программы
<?xml version="1.0" encoding="utf-8"?> <data> <students> <student> <id>1</id> <firstName>Николай</firstName> <middleName>Юрьевич</middleName> <lastName>Петров</lastName> <birthDate>1996-06-15</birthDate> </student> <student> <id>2</id> <firstName>Иван</firstName> <middleName>Иванович</middleName> <lastName>Иванов</lastName> <birthDate>1956-01-13</birthDate> </student> </students> <disciplines> <discipline> <id>1</id> <auditorium>245</auditorium> <date>2017-12-25</date> </discipline> <discipline> <id>2</id> <auditorium>244</auditorium> <date>2017-12-09</date> </discipline> </disciplines> <attendances> <attendance> <studentId>1</studentId> <disciplineId>1</disciplineId> </attendance> <attendance> <studentId>2</studentId> <disciplineId>2</disciplineId> </attendance> </attendances> </data>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д