C#笔记 通用文件的存取之二——XML文件的读取与写入

在设计程序的时候,对于一些变化性较强的数据,可以保存在XML文件中,以方便用户修改。尤其是对于一些软硬件的配置文件,很多都选择了用XML文件来存取。XML文件简单易用,而且可以在任何应用程序中读写数据,所以它是一种重要的通用文件。下面的例子简单演示了XML文件的创建、读取和写入。


XmlProcess类中的Using指令:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;

 

XmlProcess类:

class XmlProcess
    {
        //创建一个XML对象
        XmlDocument xmlDoc;

        //定义一个结点对象
        XmlNode node;

        //获取当前工作目录路径
        string workDir = Directory.GetCurrentDirectory();

        List<Student> stuList = new List<Student>();


        //定义一个元素
        XmlElement xmlEle;
        public void CreatNewXml()
        {
            //在工作目录下创建一个XML文件
            //实例化XML对象
            xmlDoc = new XmlDocument();           

            //加入XML文件的声明段落,,<?xml version="1.0" encoding="gb2312"?>
            XmlDeclaration xmlDecl;
            xmlDecl = xmlDoc.CreateXmlDeclaration("1.0", "gb2312", null);
            xmlDoc.AppendChild(xmlDecl);

            //加入一个根元素
            xmlEle = xmlDoc.CreateElement("", "成绩表", "");
            xmlDoc.AppendChild(xmlEle);
            //获取根结点
            XmlNode root = xmlDoc.SelectSingleNode("成绩表");

            //添加一个学生记录
            XmlElement stu1 = xmlDoc.CreateElement("学员1");
           
            XmlElement stuNo = xmlDoc.CreateElement("学号");
            stuNo.InnerText = "1001";
            XmlElement stuName = xmlDoc.CreateElement("姓名");
            stuName.InnerText = "abc";
            XmlElement stuGrade = xmlDoc.CreateElement("成绩");
            stuGrade.InnerText = "96";
            stu1.AppendChild(stuNo);
            stu1.AppendChild(stuName);
            stu1.AppendChild(stuGrade);
            root.AppendChild(stu1);

            //添加第二个学生记录
            XmlElement stu2 = xmlDoc.CreateElement("学员2");

            stuNo = xmlDoc.CreateElement("学号");
            stuNo.InnerText = "1002";
            stuName = xmlDoc.CreateElement("姓名");
            stuName.InnerText = "abcd";
            stuGrade = xmlDoc.CreateElement("成绩");
            stuGrade.InnerText = "90";
            stu2.AppendChild(stuNo);
            stu2.AppendChild(stuName);
            stu2.AppendChild(stuGrade);
            root.AppendChild(stu2);

            //以上为手动添加XML文件的方法,用于创建并书写XML文件
            //还可以使用XmlTextWriter对象输出数据流


            //生成并保存XML文件
            xmlDoc.Save(workDir + "//StudentGrade.xml");
        }


        public void DataIn(string fileName)
        {           
            xmlDoc = new XmlDocument();

            //载入XML文件
            xmlDoc.Load(workDir+"//"+fileName);
            //获取根结点
            XmlNodeList nodes = xmlDoc.SelectNodes("/成绩表");
            for (int i = 0; i < nodes.Count; i++)
            {
                //获取学生信息的结点总数
                XmlNodeList nls = nodes[i].ChildNodes;

                //循环填充学生实例的各个字段
                for (int j = 0; j < nls.Count; j++)
                {
                    //创建学生类实例
                    Student stu = new Student();

                    node = nls[j].SelectSingleNode("学号");
                    stu.学号 = int.Parse(node.InnerText);

                    node = nls[j].SelectSingleNode("姓名");
                    stu.姓名 = node.InnerText;

                    node = nls[j].SelectSingleNode("成绩");
                    stu.成绩 = int.Parse(node.InnerText);
                    stuList.Add(stu);
                }
            }
        }

        public void DataOut()
        {
            //输出学生信息
            for (int i = 0; i < stuList.Count; i++)
            {
                Student stu = stuList[i];
                Console.WriteLine(stu.学号.ToString()+"  "+stu.姓名+"  "+stu.成绩.ToString());
            }
        }


        /*
        public void WriteXml()
        {
            XmlTextWriter writer = new XmlTextWriter(workDir + "//test.xml", Encoding.Default);
            writer.Formatting = Formatting.Indented;
            writer.WriteStartDocument();           
            writer.WriteStartElement("学员");
            writer.WriteElementString("学号", "110");
            writer.WriteEndElement();
            writer.WriteEndDocument();
            writer.Flush();
            writer.Close();
        }
        */

    }

 

读取出的数据仍然缓冲在泛型类List中,数据记录保存在Student类的实例中:
Student类:

class Student
    {
        public int 学号 { get; set; }
        public string 姓名 { get; set; }
        public int 成绩 { get; set; }
    }

 

XML文件的内容:

<?xml version="1.0" encoding="gb2312"?>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客<成绩表>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客  <学员1>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客    <学号>1001</学号>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客    <姓名>abc</姓名>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客    <成绩>96</成绩>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客  </学员1>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客  <学员2>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客    <学号>1002</学号>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客    <姓名>abcd</姓名>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客    <成绩>90</成绩>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客  </学员2>

C笔记 通用文件的存取之二——XML文件的读取与写入 - GB2013 - GB2013的博客</成绩表>

该示例演示的是创建XML文件并在其中手动插入数据。
       如果XML文件已经存在,则可以直接对其进行读取及各种其他操作,具体操作请参见其他博友的博客内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值