首页 > 解决方案 > 使用(LINQ to XML)从 XML 填充 C# 动态 TreeView

问题描述

我正在尝试使用 XDocument (LINQ to XML) 从 XML 文件中填充 C# 中的 TreeView,我尝试使用此链接

当我无法理解链接中的代码如何工作时,我只是将其复制到我的项目中并更改了必要的变量,但它在 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>

树视图中的结果显示为:

树视图结果

标签: c#xmltreeviewlinq-to-xml

解决方案


使用带有 XML Linq 和递归的 Windows 窗体:

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);
            }
        }
    }
}

在此处输入图像描述


推荐阅读