Чтение xml - C# (184840)
Формулировка задачи:
Добрый день!
Имеется xml файл такого содержания:
Пытаюсь вывести uid, first_name, last_name - получается - выводит поочередно данные каждого тега user.
Но внутри тега relatives мне нужны данные каждого тега type. А программа выводит мне данные только первого тега:
<uid>33333333</uid>
<type>sibling</type>
Не могу понять почему...
Код программы:
Помогите пожалуйста разобраться.
<response list="true">
<count>19189</count>
<user>
<uid>1111111</uid>
<first_name>Frag</first_name>
<last_name>Fragovich</last_name>
</user>
<user>
<uid>222222</uid>
<first_name>User</first_name>
<last_name>Userovich</last_name>
<relatives list="true">
<relative>
<uid>33333333</uid>
<type>sibling</type>
</relative>
<relative>
<uid>4444444</uid>
<type>sibling</type>
</relative>
<relative>
<uid>5555555</uid>
<type>sibling</type>
</relative>
<relative>
<uid>6666666</uid>
<type>sibling</type>
</relative>
<relative>
<uid>7777777</uid>
<type>sibling</type>
</relative>
</relatives>
</user>
<user>
<uid>8888888</uid>
<first_name>Prog</first_name>
<last_name>Progovich</last_name>
</user>
</response>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace xmltest
{
class Program
{
static void Main(string[] args)
{
string fileName = @"c:\1\test1.xml";
XDocument document = XDocument.Load(fileName);
foreach (XElement element in document.Root.Elements())
{
switch (element.Name.ToString())
{
case "user":
foreach (XElement el in element.Elements())
{
switch (el.Name.ToString())
{
case "uid":
Console.WriteLine("uid: " + el.Value);
break;
case "first_name":
Console.WriteLine("first_name: " + el.Value);
break;
case "last_name":
Console.WriteLine("last_name: " + el.Value);
break;
case "relatives":
foreach (XElement ellev1 in el.Elements())
{
switch (ellev1.Name.ToString())
{
case "relative":
foreach (XElement ellev2 in ellev1.Elements())
{
switch (ellev2.Name.ToString())
{
case "uid":
Console.WriteLine("uid: " + ellev2.Value);
break;
case "type":
Console.WriteLine("type: " + ellev2.Value);
break;
case "name":
Console.WriteLine("name: " + ellev2.Value);
break;
}
}
break;
}
break;
}
break;
}
}
break;
}
}
Console.Read();
}
}
}Решение задачи: «Чтение xml»
textual
Листинг программы
var users = document.XPathSelectElements("response/user")
.Select(u=>new
{
Uid = u.Element("uid")?.Value,
FirstName = u.Element("first_name")?.Value,
LastName = u.Element("last_name")?.Value,
Relatives = u.Element("relatives")?
.Elements("relative")
.Select(r=>new { type = r.Element("type")?.Value })
.ToList()
}).ToList();