.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>