用ASP.NET 实现对XML文件的增删改。

1using System;
2using System.Collections;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Web;
7using System.Web.SessionState;
8using System.Web.UI;
9using System.Web.UI.WebControls;
10using System.Web.UI.HtmlControls;
11using System.Xml;
12using System.Xml.XPath;
13
14namespace OperateXML
15{
16 ///
17 /// xdoc 的摘要说明。
18 ///

19 public class XML : System.Web.UI.Page
20 {
21 protected System.Web.UI.WebControls.Label Label1;
22 protected System.Web.UI.WebControls.Label Label2;
23 protected System.Web.UI.WebControls.Button Button1;
24 protected System.Web.UI.WebControls.Label Label3;
25 protected System.Web.UI.WebControls.Button Button2;
26 protected System.Web.UI.WebControls.Button Button3;
27 protected System.Web.UI.WebControls.DataGrid dg;
28 protected System.Web.UI.WebControls.DropDownList ddl;
29 protected System.Web.UI.WebControls.TextBox tbn;
30 protected System.Web.UI.WebControls.Label Label4;
31 protected System.Web.UI.WebControls.Label Label5;
32 protected System.Web.UI.WebControls.Label Label6;
33 protected System.Web.UI.WebControls.TextBox tbna;
34 protected System.Web.UI.WebControls.TextBox tbc;
35 protected System.Web.UI.WebControls.TextBox tbe;
36 protected System.Web.UI.WebControls.Button Button4;
37
38 private void Page_Load(object sender, System.EventArgs e)
39 {
40 if(!Page.IsPostBack)
41 {
42 fill();
43 }

44 }

45
46 #region Web 窗体设计器生成的代码
47 override protected void OnInit(EventArgs e)
48 {
49 //
50 // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
51 //
52 InitializeComponent();
53 base.OnInit(e);
54 }

55
56 /**////
57 /// 设计器支持所需的方法 - 不要使用代码编辑器修改
58 /// 此方法的内容。
59 ///

60 private void InitializeComponent()
61 {
62 this.Button1.Click += new System.EventHandler(this.Button1_Click);
63 this.Button2.Click += new System.EventHandler(this.Button2_Click);
64 this.Button3.Click += new System.EventHandler(this.Button3_Click);
65 this.Button4.Click += new System.EventHandler(this.Button4_Click);
66 this.Load += new System.EventHandler(this.Page_Load);
67
68 }

69 #endregion

70
71 #region 绑定
72
73 private void fill()
74 {
75 DataSet ds=new DataSet();
76 ds.ReadXml(Server.MapPath("\\OperateXML\\doc.xml"));
77 dg.DataSource=ds.Tables[0];
78 dg.DataBind();
79 XmlDocument xd=new XmlDocument();
80 xd.Load(Server.MapPath("\\OperateXML\\doc.xml"));
81 System.Xml.XmlNodeList xnl=xd.GetElementsByTagName("Name");
82 ddl.Items.Clear();
83 for(int i=0;i<xnl.Count;i++)
84 {
85 ddl.Items.Add(xnl[i].InnerText);
86 }

87 }

88
89 #endregion

90
91 #region 查询
92
93 private void Button1_Click(object sender, System.EventArgs e)
94 {
95 XmlDocument xd=new XmlDocument();
96 xd.Load(Server.MapPath("\\OperateXML\\doc.xml"));
97 tbn.Text=xd.SelectSingleNode("//User[Name='"+ddl.SelectedItem.Text+"']").ChildNodes.Item(2).InnerText.ToString();
98
99 }

100
101 #endregion

102
103 #region 删除
104 private void Button2_Click(object sender, System.EventArgs e)
105 {
106 XmlDocument xdoc=new XmlDocument();
107 xdoc.Load(Server.MapPath("\\OperateXML\\doc.xml"));
108 XmlNodeList xnl=xdoc.SelectSingleNode("dbGuest").ChildNodes;
109
110 foreach(XmlNode xn in xnl)
111 {
112 XmlElement xe=(XmlElement)xn;
113 XmlNodeList node=xe.GetElementsByTagName("Name");//查找他的Name行
114 if(node.Count>0)
115 {
116 if(node[0].InnerText==ddl.SelectedItem.Text)//如果当前节点的名字和下拉列表传来的一样,就删除
117 {
118 xe.RemoveAll();//删除节点的所有指定属性和子集,但是不删除默认属性,我很郁闷,不知道怎么连属性一起删除,如果有朋友知道,请一定告诉我下,谢谢了!
119
120 }

121 break;
122 }

123
124 }

125 xdoc.Save(Server.MapPath("\\OperateXML\\doc.xml"));
126 fill();
127 }

128
129 #endregion

130
131 #region 添加
132
133 private void Button3_Click(object sender, System.EventArgs e)
134 {
135 string name=this.tbna.Text.ToString();
136 string city=this.tbc.Text.ToString();
137 string email=this.tbe.Text.ToString();
138
139 XmlDocument xd=new XmlDocument();
140 xd.Load(Server.MapPath("\\OperateXML\\doc.xml"));
141 //查找dbGuest节点
142 XmlNode xn=xd.SelectSingleNode("dbGuest");
143 //创建user节点
144 XmlElement xe_u=xd.CreateElement("User");
145 //创建一个name元素
146 XmlElement xe_a1=xd.CreateElement("Name");
147 xe_a1.InnerText=name;//设置该元素的值
148 xe_u.AppendChild(xe_a1);//把刚才创建的元素插入name节点里面去
149 XmlElement xe_a2=xd.CreateElement("City");
150 xe_a2.InnerText=city;
151 xe_u.AppendChild(xe_a2);
152 XmlElement xe_a3=xd.CreateElement("Email");
153 xe_a3.InnerText=email;
154 xe_u.AppendChild(xe_a3);
155 XmlElement xe_a4=xd.CreateElement("Time");
156 xe_a4.InnerText=(DateTime.Now).ToString();
157 xe_u.AppendChild(xe_a4);
158 //将User节点插入到dbGuest
159 xn.AppendChild(xe_u);
160 //保存XML文件
161 xd.Save(Server.MapPath("\\OperateXML\\doc.xml"));
162 fill();
163 }

164
165 #endregion

166
167 #region 修改邮件地址
168
169 private void Button4_Click(object sender, System.EventArgs e)
170 {//修改邮件地址
171 XmlDocument xd=new XmlDocument();
172 xd.Load(Server.MapPath("\\OperateXML\\doc.xml"));//载入XML文件
173 XmlNodeList xnl=xd.SelectSingleNode("dbGuest").ChildNodes;//获取dbGuest节点的全部子节点
174 foreach(XmlNode xn in xnl)//迭代所有子节点
175 {
176 XmlElement xe=(XmlElement)xn;//将迭代到的子节点转换成XmlElement类型
177 XmlNodeList xnl2=xe.GetElementsByTagName("Name");//返回所有Name列的数据
178 if(xnl2.Count>0)//如果大于零就表示有撒,
179 {
180 if(xnl2[0].InnerText==ddl.SelectedItem.Text)//如果该列有和被下拉列表中返回的值一样的数据的话
181 {
182 XmlNodeList xnl3=xe.ChildNodes;//再获取下面所有的子节点
183 foreach(XmlNode xn1 in xnl3)//再迭代子集
184 {
185 XmlElement xe2=(XmlElement)xn1;//转换类型
186 if(xe2.Name=="Email")//如果节点名字是Email的话
187 {
188 xe2.InnerText=tbn.Text;//该节点的值就替换成文本框中的
189 break;
190 }

191 }

192 break;
193 }

194 }

195 }

196 xd.Save(Server.MapPath("\\OperateXML\\doc.xml"));
197 fill();
198 }

199
200 #endregion

201 }

202}


XML文件如下:



林文龙







钟扬
合肥





钟扬
合肥





钟扬
合肥





余智学
重庆
yuzhixue@163.com



余智学
重庆
yuzhixue@163.com