Как получить значение атрибута XML - C#

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

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

Листинг программы
  1. <items>
  2. <item name = "A">
  3. <element name = "el_name" address = "..."/>
  4. <element name = "el_name" address = "..."/>
  5. <element name = "el_name" address = "..."/>
  6. <item name = "A-1">
  7. <element name = "el_name" address = "..."/>
  8. <element name = "el_name" address = "..."/>
  9. <element name = "el_name" address = "..."/>
  10. </item>
  11. </item>
  12. <item name = "B">
  13. <element name = "el_name" address = "..."/>
  14. <element name = "el_name" address = "..."/>
  15. <element name = "el_name" address = "..."/>
  16. </item>
  17. </items>
Всем привет! Есть элемент управления TreeView, который заполняется данными из XML файла Как получить значение атрибута address, элемента, выделенного в TreeView?

Решение задачи: «Как получить значение атрибута XML»

textual
Листинг программы
  1. using System.Collections.Generic;
  2. using System.Drawing;
  3. using System.Linq;
  4. using System.Windows.Forms;
  5. using System.Xml.Linq;
  6.  
  7. internal class Test
  8. {
  9.     public static void Main()
  10.     {
  11.         var doc = XDocument.Parse(@"<items>
  12.    <item name = 'A'>
  13.        <element name = 'el_name' address = '...'/>
  14.        <element name = 'el_name' address = '...'/>
  15.        <element name = 'el_name' address = '...'/>
  16.  
  17.        <item name = 'A-1'>
  18.            <element name = 'el_name' address = '...'/>
  19.            <element name = 'el_name' address = '...'/>
  20.            <element name = 'el_name' address = '...'/>
  21.        </item>
  22.    </item>
  23.  
  24.    <item name = 'B'>
  25.        <element name = 'el_name' address = '...'/>
  26.        <element name = 'el_name' address = '...'/>
  27.        <element name = 'el_name' address = '...'/>
  28.    </item>
  29. </items>");
  30.         var root = doc.Root;
  31.         var x = GetNodes(new TreeNode(root.Name.LocalName), root).ToArray();
  32.         var tree = new TreeView();
  33.         tree.Nodes.AddRange(x);
  34.         tree.AfterSelect +=
  35.             (sender, args) =>
  36.             {
  37.                 var tmp = string.Join(" ", args.Node.Text.Split(' ').Skip(1));
  38.                 if (tmp != string.Empty)
  39.                 {
  40.                     MessageBox.Show(string.Format("У выбранного элемента атрибуты -> {0}", tmp));
  41.                 }
  42.             };
  43.         tree.Size = new Size(400, 400);
  44.         var form = new Form { Size = new Size(500, 500) };
  45.         form.Controls.Add(tree);
  46.         form.AutoSize = true;
  47.  
  48.         Application.Run(form);
  49.     }
  50.  
  51.     private static IEnumerable<TreeNode> GetNodes(TreeNode node, XElement element)
  52.     {
  53.         return element.HasElements
  54.             ? node.AddRange(
  55.                 element.Elements()
  56.                     .Select(
  57.                         item =>
  58.                             new
  59.                             {
  60.                                 item,
  61.                                 tree =
  62.                                     new TreeNode(item.Name.LocalName + " " +
  63.                                                  (item.HasAttributes ? string.Join(" ", item.Attributes()) : ""))
  64.                             })
  65.                     .SelectMany(@t => GetNodes(@t.tree, @t.item)))
  66.             : new[] { node };
  67.     }
  68. }
  69.  
  70.  
  71. public static class TreeNodeEx
  72. {
  73.     public static IEnumerable<TreeNode> AddRange(this TreeNode collection, IEnumerable<TreeNode> nodes)
  74.     {
  75.         var items = nodes.ToArray();
  76.         collection.Nodes.AddRange(items);
  77.         return new[] { collection };
  78.     }
  79. }

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


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

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

6   голосов , оценка 4 из 5

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

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

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