C#操作XML初步(5)
第三章:XML文件记录的编辑
使用C#来编辑XML文件,最方便的方法当然还是使用DATASET
我们继续使用上一篇中的XML文件,如下: <users>
<xs:schema id="users" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="users" msdata:IsDataSet="true" msdata:Locale="zh-CN">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<xs:element name="userName" type="xs:string" minOccurs="0" msdata:Ordinal="0" />
<xs:element name="userPass" type="xs:string" minOccurs="0" msdata:Ordinal="1" />
</xs:sequence>
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<user id="1">
<userName>outrace</userName>
<userPass>mypass</userPass>
</user>
<user id="2">
<userName>trace</userName>
<userPass>mypass</userPass>
</user>
<user id="3">
<userName>new user</userName>
<userPass>new passwd</userPass>
</user>
</users>
则,我们新建一个XML文件,内容如下: <% @ Import Namespace="System.IO" %>
<% @ Import Namespace="System.Xml" %>
<% @ Import Namespace="System.Data" %>
<Script Language="C#" Runat="Server">
public void Page_Load(Object src,EventArgs e)
{
/*
* 版 权 : copyright by SEM IT DEPARTMENT
* 版 本 : version 0.0.1
* 文 件 : EditXml.aspx
* 用 途 : 编辑XML文件(修改、删除行)
* 作 者 : 欧阳云天 @2005-4-9
* 邮 箱 : outrace@soueast-motor.com
* 修 改 :
*/
String fileName;
fileName = "users_2.xml";
DataSet myDs = new DataSet();
try
{
FileStream fin ;
fin = new FileStream(Server.MapPath("./files/"+fileName), FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
myDs.ReadXml(fin);
fin.Close();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
//绑定修改前的XML
OldData.DataSource = myDs.Tables[0].DefaultView;
OldData.DataBind();
//当DS当中增加新行
DataRow newRow = myDs.Tables[0].NewRow();
newRow["id"] = "44";
newRow["userName"] = "test user";
newRow["userPass"] = "test passwd";
myDs.Tables[0].Rows.Add(newRow);
//绑定新增一条记录的数据
NewData.DataSource = myDs.Tables[0].DefaultView;
NewData.DataBind();
//进行过滤
DataRow[] editRow = myDs.Tables[0].Select("id = '44'");
for(int i=0;i<editRow.Length;i++)
{
editRow[i]["userName"] = "changed user";
editRow[i]["userPass"] = "changed passwd";
}
//绑定修改记录后的数据
EditData.DataSource = myDs.Tables[0].DefaultView;
EditData.DataBind();
for(int i=0;i<editRow.Length;i++)
{
editRow[i].Delete(); //把该数据删除
}
//绑定删除记录后的数据
DeleData.DataSource = myDs.Tables[0].DefaultView;
DeleData.DataBind();
//将myDs的改变写入XML
try
{
myDs.WriteXml(Server.MapPath("./files/"+fileName), XmlWriteMode.WriteSchema);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
myDs.Dispose();
}
</script>
<html>
<head>
<title>编辑数据</title>
</head>
<body>
<form runat="server">
<table width="100%">
<tr>
<td>原数据</td>
<td>新增行</td>
<td>修改行</td>
<td>删除行</td>
</tr>
<tr>
<td valign="top"><asp:DataGrid id="OldData" runat="server"/></td>
<td valign="top"><asp:DataGrid id="NewData" runat="server"/></td>
<td valign="top"><asp:DataGrid id="EditData" runat="server"/></td>
<td valign="top"><asp:DataGrid id="DeleData" runat="server"/></td>
</tr>
</table>
</form>
</body>
</html>
大家运行完这个文件,就可以非常直观的看到操作效果,由于我们是最后才保存,所以XML文件的内容没有发生改变