Чтение 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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д