C#的XML文件的读取与写入

来源:互联网 发布:谁有c语言数据结构视频 编辑:程序博客网 时间:2024/05/16 08:51

在设计程序的时候,对于一些变化性较强的数据,可以保存在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"?>
<成绩表>
  
<学员1>
    
<学号>1001</学号>
    
<姓名>abc</姓名>
    
<成绩>96</成绩>
  
</学员1>
  
<学员2>
    
<学号>1002</学号>
    
<姓名>abcd</姓名>
    
<成绩>90</成绩>
  
</学员2>
</成绩表>

该示例演示的是创建XML文件并在其中手动插入数据。
如果XML文件已经存在,则可以直接对其进行读取及各种其他操作,具体操作请百度搜索一下。

原创粉丝点击