ASP.NET操作XML文件---增加、修改、删除、显示

这里以一个学生表为例,演示了对XML文件的插入、删除、修改、显示的基本操作。

需要准备的XML文件,文件名为StuData.xml,存放于XMLFile文件夹里

<?xml version="1.0" encoding="utf-8"?>

<Class>

<Student>

<ID>1</ID>

<Name>王维</Name>

<Sex></Sex>

<Address>大连市软件园</Address>

</Student>

<Student>

<ID>2</ID>

<Name>李白</Name>

<Sex></Sex>

<Address>北京市海淀区</Address>

</Student>

<Student>

<ID>3</ID>

<Name>李清照</Name>

<Sex></Sex>

<Address>上海市闵行区</Address>

</Student>

<Student>

<ID>4</ID>

<Name>李商隐</Name>

<Sex></Sex>

<Address>深圳市深圳大学</Address>

</Student>

</Class>

建立一个操作XML文件的类XMLBusiness.cs,其代码如下:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Xml; using System.Data; /// <summary> ///XMLBusiness 的摘要说明 /// </summary> public class XMLBusiness { //XML文件路径 public string filePath =string.Empty; public XMLBusiness() { } public XMLBusiness(string filePath) { this.filePath = filePath; } /// <summary> /// 获得主键 /// </summary> /// <returns></returns> public string GetID() { string id = string.Empty; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); XmlNode xmlNode = xmlDoc.DocumentElement.LastChild; if (xmlNode != null) { id = Convert.ToString(Convert.ToUInt32(xmlNode["ID"].InnerText) + 1); } return id; } /// <summary> /// 增加学生信息,保存为XML形式 /// </summary> /// <param name="name"></param> /// <param name="sex"></param> /// <param name="address"></param> public void AddStudent(string name, string sex, string address) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); //创建新节点Student XmlElement xmlEleStudent = xmlDoc.CreateElement("Student"); //创建学生新节点Student的子节点 XmlElement xmlEleId = xmlDoc.CreateElement("ID"); XmlElement xmlEleName = xmlDoc.CreateElement("Name"); XmlElement xmlEleSex = xmlDoc.CreateElement("Sex"); XmlElement xmlEleAddress = xmlDoc.CreateElement("Address"); //增加子节点的值 xmlEleId.InnerText = GetID(); xmlEleName.InnerText = name; xmlEleSex.InnerText = sex; xmlEleAddress.InnerText = address; //将子节点增加到学生节点Student上 xmlEleStudent.AppendChild(xmlEleId); xmlEleStudent.AppendChild(xmlEleName); xmlEleStudent.AppendChild(xmlEleSex); xmlEleStudent.AppendChild(xmlEleAddress); //将学生节点Student加入到XML文件中(加在最后一条记录上) xmlDoc.DocumentElement.AppendChild(xmlEleStudent); //如果要插到某条记录之后也可以用(如:加在第一条记录之后) //xmlDoc.DocumentElement.InsertAfter(xmlEleStudent, xmlDoc.DocumentElement.ChildNodes.Item(0)); //如果要插到某条记录之后也可以用(如:加在第一条记录之前) //xmlDoc.DocumentElement.InsertBefore(xmlEleStudent, xmlDoc.DocumentElement.ChildNodes.Item(0)); //保存 xmlDoc.Save(filePath); } /// <summary> /// 更新学生信息 /// </summary> /// <param name="name"></param> /// <param name="sex"></param> /// <param name="address"></param> /// <param name="id"></param> public void UpdateStudent(string name, string sex, string address, string id) { if (String.IsNullOrEmpty(id) == true) return; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); //获得节点列表 XmlNodeList xmlNodeList = xmlDoc.SelectNodes("Class/Student[ID='" + id + "']"); XmlNode xmlNode = xmlNodeList.Item(0); xmlNode["Name"].InnerText = name; xmlNode["Sex"].InnerText = sex; xmlNode["Address"].InnerText = address; xmlDoc.Save(filePath); } /// <summary> /// 通过ID删除学生 /// </summary> /// <param name="id"></param> public void DelStudentById(string id) { if (String.IsNullOrEmpty(id) == true) return; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); //找到要删除的节点 XmlNodeList xmlNodeList = xmlDoc.SelectNodes("Class/Student[ID='" + id + "']"); XmlNode xmlNode = xmlNodeList.Item(0); //执行删除 xmlNode.ParentNode.RemoveChild(xmlNode); xmlDoc.Save(filePath); } /// <summary> /// 获得所有学生信息 /// </summary> /// <returns></returns> public DataSet GetAllStudent() { DataSet ds = new DataSet(); ds.ReadXml(filePath); return ds; } /// <summary> /// 通过学生ID获得学生节点 /// </summary> /// <param name="id"></param> /// <returns></returns> public XmlNode GetStudentNodeByID(string id) { if (String.IsNullOrEmpty(id) == true) return null; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); //查找某个节点 XmlNodeList xmlNodeList = xmlDoc.SelectNodes("Class/Student[ID='" + id + "']"); XmlNode xmlNode = xmlNodeList.Item(0); return xmlNode; } /// <summary> /// 通过学生ID获得学生信息 /// </summary> /// <param name="id"></param> /// <returns></returns> public DataTable GetStudentByID(string id) { if (String.IsNullOrEmpty(id) == true) return null; XmlNode xmlNode = GetStudentNodeByID(id); //建立表,表名为Student DataTable dt = new DataTable("Student"); //增加字段 dt.Columns.Add("ID"); dt.Columns.Add("Name"); dt.Columns.Add("Sex"); dt.Columns.Add("Address"); //增加一行并复制 DataRow dr = dt.NewRow(); dr["ID"] = xmlNode["ID"].InnerText; dr["Name"] = xmlNode["Name"].InnerText; dr["Sex"] = xmlNode["Sex"].InnerText; dr["Address"] = xmlNode["Address"].InnerText; //把新增的行添加到表中 dt.Rows.Add(dr); return dt; } }

建立一个WEB页面XMLOperation.aspx来看看如何使用这个类。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="XMLOperation.aspx.cs" Inherits="XMLOperation" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"

BorderWidth="1px" DataKeyNames="ID"

onrowcancelingedit="GridView1_RowCancelingEdit"

onrowdeleting="GridView1_RowDeleting" onrowediting="GridView1_RowEditing"

onrowupdating="GridView1_RowUpdating" Width="500px" >

<Columns>

<asp:BoundField DataField="ID" HeaderText="编号" ReadOnly="True" />

<asp:BoundField DataField="Name" HeaderText="姓名" />

<asp:TemplateField HeaderText="性别">

<ItemTemplate>

<asp:DropDownList ID="ddlSex" runat="server">

<asp:ListItem Value="0"></asp:ListItem>

<asp:ListItem Value="1"></asp:ListItem>

</asp:DropDownList>

</ItemTemplate>

</asp:TemplateField>

<asp:BoundField DataField="Address" HeaderText="地址" />

<asp:TemplateField HeaderText="查看">

<ItemTemplate>

<asp:HyperLink ID="HyperLink1" runat="server"

NavigateUrl='<%# "XMLOperation.aspx?ID="+Eval("ID") %>' >查看</asp:HyperLink>

</ItemTemplate>

</asp:TemplateField>

<asp:CommandField HeaderText="编辑" ShowEditButton="True" />

<asp:CommandField HeaderText="删除" ShowDeleteButton="True" />

</Columns>

</asp:GridView>

</div>

<p>

姓名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<br />

性别:<asp:DropDownList ID="DropDownList1" runat="server">

<asp:ListItem></asp:ListItem>

<asp:ListItem></asp:ListItem>

</asp:DropDownList>

<br />

住址:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

<br />

<br />

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="增加" />

</p>

<p>

&nbsp;</p>

<p>

&nbsp;</p>

<p>

&nbsp;</p>

</form>

</body>

</html>

后代代码XMLOperation.aspx.cs为:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; public partial class XMLOperation : System.Web.UI.Page { private string filePath = string.Empty; private XMLBusiness xmlObj = null; protected void Page_Load(object sender, EventArgs e) { filePath = Server.MapPath(@"XMLFile/StuData.xml"); xmlObj = new XMLBusiness(filePath); if (Page.IsPostBack == false) { Bind(); } } private void Bind() { DataSet ds = xmlObj.GetAllStudent(); GridView1.DataSource = ds; GridView1.DataBind(); //显示性别下拉列表 DropDownList ddl; for (int i = 0; i < GridView1.Rows.Count; i++) { DataRowView drv = ds.Tables[0].DefaultView[i]; if (drv["Sex"].ToString() == "男") { ddl = (DropDownList)GridView1.Rows[i].FindControl("ddlSex"); ddl.SelectedIndex = 0; } if (drv["Sex"].ToString() == "女") { ddl = (DropDownList)GridView1.Rows[i].FindControl("ddlSex"); ddl.SelectedIndex = 1; } } //如果URL中存在ID代表选择了查看 if (Request.QueryString["ID"] != null) { string id = Request.QueryString["ID"].ToString(); DataTable dt = xmlObj.GetStudentByID(id); TextBox1.Text = dt.Rows[0]["Name"].ToString(); DropDownList1.SelectedValue = dt.Rows[0]["Sex"].ToString(); TextBox2.Text = dt.Rows[0]["Address"].ToString(); } } //删除 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string id = GridView1.DataKeys[e.RowIndex].Value.ToString(); xmlObj.DelStudentById(id); Bind(); } //更新 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { string id = GridView1.DataKeys[e.RowIndex].Value.ToString(); //以下两种数据类型转换都可以 string name = (GridView1.Rows[e.RowIndex].Cells[1].Controls[0] as TextBox).Text.Trim(); string address = ((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text.Trim(); //查找模板列的ddlSex控件,用FindControl方法 string sex = (GridView1.Rows[e.RowIndex].FindControl("ddlSex") as DropDownList).SelectedItem.Text.Trim(); xmlObj.UpdateStudent(name, sex, address, id); GridView1.EditIndex = -1; ; Bind(); } //点击编辑后显示文本框 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; Bind(); } //点击取消,文本框消失 protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView1.EditIndex = -1; Bind(); } //增加 protected void Button1_Click(object sender, EventArgs e) { xmlObj.AddStudent(TextBox1.Text, DropDownList1.SelectedItem.Text, TextBox2.Text); Response.Redirect(Request.Url.ToString()); } }

查看运行结果

全部显示:

修改单条信息:

查看单条信息: