c# 读取xml到datagridview
<?xml version="1.0" encoding="utf-8"?>
<Employees>
<Employee>
<ID>101</ID>
<Name>张三</Name>
<Age>30</Age>
<Department>技术部</Department>
<Salary>15000</Salary>
</Employee>
<Employee>
<ID>102</ID>
<Name>李四</Name>
<Age>28</Age>
<Department>市场部</Department>
<Salary>12000</Salary>
</Employee>
<Employee>
<ID>103</ID>
<Name>王五</Name>
<Age>35</Age>
<Department>财务部</Department>
<Salary>18000</Salary>
</Employee>
</Employees>
using System;
using System.Data;
using System.Windows.Forms;
using System.Xml;
private void LoadXmlWithXmlDocument(string filePath)
{
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filePath);
// 创建DataTable
DataTable dataTable = new DataTable("Employees");
// 添加列
dataTable.Columns.Add("ID", typeof(int));
dataTable.Columns.Add("姓名", typeof(string));
dataTable.Columns.Add("年龄", typeof(int));
dataTable.Columns.Add("部门", typeof(string));
dataTable.Columns.Add("薪资", typeof(decimal));
// 获取所有Employee节点
XmlNodeList employeeNodes = xmlDoc.SelectNodes("//Employee");
if (employeeNodes != null && employeeNodes.Count > 0)
{
foreach (XmlNode employeeNode in employeeNodes)
{
DataRow row = dataTable.NewRow();
// 读取节点数据
row["ID"] = GetNodeValue(employeeNode, "ID", 0);
row["姓名"] = GetNodeValue(employeeNode, "Name", "");
row["年龄"] = GetNodeValue(employeeNode, "Age", 0);
row["部门"] = GetNodeValue(employeeNode, "Department", "");
row["薪资"] = GetNodeValue(employeeNode, "Salary", 0m);
dataTable.Rows.Add(row);
}
dataGridView.DataSource = dataTable;
lblStatus.Text = $"成功加载 {employeeNodes.Count} 条记录";
}
else
{
lblStatus.Text = "未找到Employee数据";
}
}
catch (Exception ex)
{
MessageBox.Show($"解析XML时出错:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// 辅助方法:安全获取节点值
private T GetNodeValue<T>(XmlNode parentNode, string nodeName, T defaultValue)
{
try
{
XmlNode node = parentNode.SelectSingleNode(nodeName);
if (node != null && !string.IsNullOrEmpty(node.InnerText))
{
return (T)Convert.ChangeType(node.InnerText, typeof(T));
}
}
catch
{
// 转换失败时返回默认值
}
return defaultValue;
}