要读取的XML文件数据;注意:1)编码格式要与存储时的编码格式相同 2)最好通过浏览器查看一下编写的XML文件内容与格式是否正确
<?xml version="1.0" encoding="utf-8" ?>
<School>
<Class cid="101">
<student sid="101001">
<name>张三</name>
<age>18</age>
<gender>Male</gender>
</student>
<student sid="101002">
<name>李四</name>
<age>19</age>
<gender>Female</gender>
</student>
<student sid="101003">
<name>王五</name>
<age>20</age>
<gender>Male</gender>
</student>
</Class>
<Class cid="102">
<student sid="102001">
<name>马六</name>
<age>20</age>
<gender>Male</gender>
</student>
<student sid="102002">
<name>赵奇</name>
<age>18</age>
<gender>Female</gender>
</student>
</Class>
</School>
创建窗体项目,在窗体中拖入TreeView控件,在窗体的加载Load事件中绑定数据,之前详细说过递归加载数据到TreeView控件上有示例说明.不再赘述
using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Xml.Linq;
namespace _02加载XML数据到TreeView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
////1 加载XML数据
//XDocument xd = XDocument.Load(@"d:\66.xml");
////2 获取XML的根节点
//XElement xeRoot = xd.Root;
////3 创建一个TreeNode节点作为TreeView的根节点
//TreeNode tvRoot = new TreeNode();
////4 为tvRoot赋值
//tvRoot.Text = xeRoot.Name.ToString();
////5 将创建的节点添加到 TreeView 上
//treeView1.Nodes.Add(tvRoot);
////6 递归加载数据到TreeView 上
//LoadNodes(xeRoot, tvRoot);
//========================================
//以上步骤可由下面代码代替
//1 加载XML数据
XDocument xd = XDocument.Load(@"d:\66.xml");
//2 获取XML的根节点
XElement xeRoot = xd.Root;
//通过Add()重载方法得到 TreeNode 节点
TreeNode tvRoot = treeView1.Nodes.Add(xeRoot.Name.ToString());
//6 递归加载数据到TreeView 上
LoadNodes(xeRoot, tvRoot);
}
//递归加载数据
private void LoadNodes(XElement xeRoot, TreeNode tvRoot)
{
//把xeRoot下面的内容循环绑定到tvRoot下面
//Elements()获取当前节点下的所有节点
foreach (XElement ele in xeRoot.Elements())
{
//意为:判断当前节点下是否还有子节点
if (ele.Elements().Count() > 0)
{
//把元素本身绑定上来
TreeNode node = tvRoot.Nodes.Add(ele.Name.ToString());
//如果元素还有属性的话,把属性也绑定上来。
XAttribute attr1 = ele.Attribute("cid");
if (attr1 != null)//表示有cid属性
{
node.Text += "[" + attr1.Name + " = " + attr1.Value + "]";
}
XAttribute attr2 = ele.Attribute("sid");
if (attr2 != null)//表示有sid属性
{
node.Text += "[" + attr2.Name + " = " + attr2.Value + "]";
}
//还有子节点递归调用此方法
LoadNodes(ele, node);
}
else
{
//没有子节点,直接绑定数据
TreeNode node = tvRoot.Nodes.Add(ele.Name + " : " + ele.Value);
}
}
}
}
}