在设计程序的时候,对于一些变化性较强的数据,可以保存在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文件已经存在,则可以直接对其进行读取及各种其他操作,具体操作请百度搜索一下。