C#把xml文件加载到TreeView控件上

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


效果如下:
在这里插入图片描述
学习参考视频

发布了65 篇原创文章 · 获赞 8 · 访问量 3225

猜你喜欢

转载自blog.csdn.net/yasenRK/article/details/104087735