C#把xml文件加载到TreeView控件上
读取xml文件可以用XDocument和XMLDocument这两种技术,我在本博客上用的是XDoc技术,下一篇再介绍使用XMLDocument读取XML的代码
下面是原始XML文件
<?xml version="1.0" encoding="utf-8" ?>
<!--学生成绩信息-->
<!--这里是约束部分,即内部DTD-->
<!DOCTYPE scores[
<!ELEMENT scores (student+)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!--表示只能写可被解析的字符串,不可以在里面嵌套子子元素-->
<!ELEMENT score (#PCDATA)>
]>
<!--这里开始XML的数据部分-->
<scores>
<student id="1">
<name>张三</name>
<course>Java</course>
<score>90</score>
</student>
<student id="2">
<name>李四</name>
<course>C#</course>
<score>100</score>
</student>
<student id="3">
<name>王五</name>
<course>汇编</course>
<score>98</score>
</student>
</scores>
下面是读取XML的C#代码
using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Windows.Forms;
namespace Treeview练习
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//使用xDocument来读取xml文件
XDocument document = XDocument.Load("Student.xml");
//取出根节点
XElement rootElement = document.Root;
//将xml文件的根元素加载到treeview的根节点上
TreeNode rootNode = treeView1.Nodes.Add(rootElement.Name.ToString());
//用递归加载XML到TreeView中
LoadxmlToTreeView(rootElement, rootNode.Nodes);
}
private void LoadxmlToTreeView(XElement rootElement,TreeNodeCollection treeNodeCollection)
{
foreach (XElement x in rootElement.Elements())
{
IEnumerable<XElement> elements = x.Elements();
//判断该元素是否是叶子元素,即下面是否还有子元素
//如果有子元素则只添加元素名称,如果是叶子元素则添加元素名称和元素内容
if(ReturnNumber(elements)==0)
{
TreeNode xnode = treeNodeCollection.Add(x.Name.ToString()).Nodes.Add(x.Value.ToString());
}
else
{
TreeNode xnode = treeNodeCollection.Add(x.Name.ToString());
LoadxmlToTreeView(x, xnode.Nodes);
}
}
}/// <summary>
/// 返回传入的集合中元素的个数
/// </summary>
/// <param name="xElements"></param>
/// <returns></returns>
private int ReturnNumber(IEnumerable<XElement> xElements)
{
int count = 0;
foreach(var x in xElements)
{
count++;
}
return count;
}
}
}
效果如下:
学习参考视频