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

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

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

Добрый день! Имеется xml файл такого содержания:
Листинг программы
  1. <response list="true">
  2. <count>19189</count>
  3. <user>
  4. <uid>1111111</uid>
  5. <first_name>Frag</first_name>
  6. <last_name>Fragovich</last_name>
  7. </user>
  8. <user>
  9. <uid>222222</uid>
  10. <first_name>User</first_name>
  11. <last_name>Userovich</last_name>
  12. <relatives list="true">
  13. <relative>
  14. <uid>33333333</uid>
  15. <type>sibling</type>
  16. </relative>
  17. <relative>
  18. <uid>4444444</uid>
  19. <type>sibling</type>
  20. </relative>
  21. <relative>
  22. <uid>5555555</uid>
  23. <type>sibling</type>
  24. </relative>
  25. <relative>
  26. <uid>6666666</uid>
  27. <type>sibling</type>
  28. </relative>
  29. <relative>
  30. <uid>7777777</uid>
  31. <type>sibling</type>
  32. </relative>
  33. </relatives>
  34. </user>
  35. <user>
  36. <uid>8888888</uid>
  37. <first_name>Prog</first_name>
  38. <last_name>Progovich</last_name>
  39. </user>
  40. </response>
Пытаюсь вывести uid, first_name, last_name - получается - выводит поочередно данные каждого тега user. Но внутри тега relatives мне нужны данные каждого тега type. А программа выводит мне данные только первого тега: <uid>33333333</uid> <type>sibling</type> Не могу понять почему... Код программы:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Xml.Linq;
  7. namespace xmltest
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. string fileName = @"c:\1\test1.xml";
  14. XDocument document = XDocument.Load(fileName);
  15. foreach (XElement element in document.Root.Elements())
  16. {
  17. switch (element.Name.ToString())
  18. {
  19. case "user":
  20. foreach (XElement el in element.Elements())
  21. {
  22. switch (el.Name.ToString())
  23. {
  24. case "uid":
  25. Console.WriteLine("uid: " + el.Value);
  26. break;
  27. case "first_name":
  28. Console.WriteLine("first_name: " + el.Value);
  29. break;
  30. case "last_name":
  31. Console.WriteLine("last_name: " + el.Value);
  32. break;
  33. case "relatives":
  34. foreach (XElement ellev1 in el.Elements())
  35. {
  36. switch (ellev1.Name.ToString())
  37. {
  38. case "relative":
  39. foreach (XElement ellev2 in ellev1.Elements())
  40. {
  41. switch (ellev2.Name.ToString())
  42. {
  43. case "uid":
  44. Console.WriteLine("uid: " + ellev2.Value);
  45. break;
  46. case "type":
  47. Console.WriteLine("type: " + ellev2.Value);
  48. break;
  49. case "name":
  50. Console.WriteLine("name: " + ellev2.Value);
  51. break;
  52. }
  53. }
  54. break;
  55. }
  56. break;
  57. }
  58. break;
  59. }
  60. }
  61. break;
  62. }
  63. }
  64. Console.Read();
  65. }
  66. }
  67. }
Помогите пожалуйста разобраться.

Решение задачи: «Чтение xml»

textual
Листинг программы
  1. var users = document.XPathSelectElements("response/user")
  2.                 .Select(u=>new
  3.                 {
  4.                     Uid = u.Element("uid")?.Value,
  5.                     FirstName = u.Element("first_name")?.Value,
  6.                     LastName = u.Element("last_name")?.Value,
  7.                     Relatives = u.Element("relatives")?
  8.                         .Elements("relative")
  9.                         .Select(r=>new { type = r.Element("type")?.Value })
  10.                         .ToList()
  11.                 }).ToList();

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут