c# - 使用(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>
树视图中的结果显示为:
解决方案
使用带有 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);
}
}
}
}
推荐阅读
- node.js - 在反应 js 应用程序中访问刷新令牌
- python - 如何获取在 Discord.py 中被禁止的人
- node.js - 没有使用 nodejs 调用 ms bot 框架 onMembersAddedActivity
- javascript - 可嵌套 JQuery 的问题
- java - 如何在模型验证spring boot中返回400状态
- processing - 尝试在使用类的处理中使球在屏幕上反弹
- sql - 如何在不使用组的情况下选择数据?
- python - cx_Oracle.DatabaseError: ORA-12592: TNS:bad packet
- ios - 显示最近的消息未定义符号:_OBJC_CLASS_$_UIPointerShape
- mongodb - 使用带有 updateOne() 方法的 upsert 来执行更新操作