C # Динамическое заполнение TreeView из XML с использованием (LINQ to XML) - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь заполнить TreeView в C # из файла XML с помощью XDocument (LINQ to XML). Я попытался использовать эту ссылку .

Когда мне не удалось понять, как код вссылка работает, я просто скопировал ее в свой проект и изменил необходимые переменные, но он возвращает странный результат для TreeView

XML-файл, который я использую, предназначен для создания папок, но папки легко создавать, потому что вы можетелегко извлечь путь из документа XML.

Вот как выглядит файл:

<?xml version="1.0" encoding="utf-8"?>
<dir name="After">
  <dir name="Site Documents">
    <dir name="02. External">
      <dir name="1. Mechanical">
        <dir name="01. Submittals">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="02. Drawings">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="03. MIR">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="04. IR">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="05. RFI">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="06. DFC">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="07. PVN">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
      </dir>
      <dir name="2. Electrical">
        <dir name="01. Submittals">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="02. Drawings">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="03. MIR">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="04. IR">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="05. RFI">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="06. DFC">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
        <dir name="07. PVN">
          <dir name="1. Sent" />
          <dir name="2. Received" />
        </dir>
      </dir>
    </dir>
      <dir name="03. Internal">
    <dir name="01. PR">
      <dir name="1. MECH">
      </dir>
      <dir name="2. ELEC" />
    </dir>
    <dir name="02. PO">
    </dir>
    <dir name="03. SRF">
    </dir>
    <dir name="04. RMR" />
  </dir>
  </dir>

</dir>

Результат в виде дерева выглядит так:

TreeView Result

1 Ответ

0 голосов
/ 26 августа 2018

Использование формы Windows с XML Linq и рекурсией:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        const string FILENAME = @"c:\temp\test.xml";
        public Form1()
        {
            InitializeComponent();
            XDocument doc = XDocument.Load(FILENAME);
            XElement dir = doc.Root;
            TreeNode node = new TreeNode((string)dir.Attribute("name"));
            treeView1.Nodes.Add(node);
            GetTree(dir, node);
            treeView1.ExpandAll();
        }
        public static void GetTree(XElement dir, TreeNode node)
        {
            foreach (XElement child in dir.Elements("dir"))
            {
                TreeNode childNode = new TreeNode((string)child.Attribute("name"));
                node.Nodes.Add(childNode);
                GetTree(child, childNode);
            }
        }
    }
}

enter image description here

...