在设计程序的时候,对于一些变化性较强的数据,可以保存在XML文件中,以方便用户修改。尤其是对于一些软硬件的配置文件,很多都选择了用XML文件来存取。XML文件简单易用,而且可以在任何应用程序中读写数据,所以它是一种重要的通用文件。下面的例子简单演示了XML文件的创建、读取和写入。
XmlProcess类中的Using指令
XmlProcess类
读取出的数据仍然缓冲在泛型类List中,数据记录保存在Student类的实例中:
Student类:
XML文件的内容:
如果XML文件已经存在,则可以直接对其进行读取及各种其他操作,具体操作请参见其他博友的博客内容。
XmlProcess类中的Using指令
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
XmlProcess类
Code
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();
}
*/
}
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; }
}
{
public int 学号 { get; set; }
public string 姓名 { get; set; }
public int 成绩 { get; set; }
}
XML文件的内容:
Code
<?xml version="1.0" encoding="gb2312"?>
<成绩表>
<学员1>
<学号>1001</学号>
<姓名>abc</姓名>
<成绩>96</成绩>
</学员1>
<学员2>
<学号>1002</学号>
<姓名>abcd</姓名>
<成绩>90</成绩>
</学员2>
</成绩表>
该示例演示的是创建XML文件并在其中手动插入数据。<?xml version="1.0" encoding="gb2312"?>
<成绩表>
<学员1>
<学号>1001</学号>
<姓名>abc</姓名>
<成绩>96</成绩>
</学员1>
<学员2>
<学号>1002</学号>
<姓名>abcd</姓名>
<成绩>90</成绩>
</学员2>
</成绩表>
如果XML文件已经存在,则可以直接对其进行读取及各种其他操作,具体操作请参见其他博友的博客内容。