Чтение xml - C# (184840)

Узнай цену своей работы

Формулировка задачи:

Добрый день! Имеется xml файл такого содержания:
<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>
Пытаюсь вывести uid, first_name, last_name - получается - выводит поочередно данные каждого тега user. Но внутри тега relatives мне нужны данные каждого тега type. А программа выводит мне данные только первого тега: <uid>33333333</uid> <type>sibling</type> Не могу понять почему... Код программы:
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();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5