就是对XML文件的创建,节点的选择,修改,删除,将XML转换为DataSet, Xpath等等的,因为是上课用的例题,所以比较全
具体效果如下 ,因为是上课用的例题,所以比较全
| 广告列表 | 功能选项 | ||||||||
|
|||||||||
| Name | Image | Alink |
|---|---|---|
| 阿里妈妈广告 | ~/image/aaa.gif | http://www.thc56.com/bbs |
| 天轰穿的淘宝小店 | ~/image/fdfd.jpeg | http://shop.thc56.com/ |
1

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

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

5
<html xmlns="http://www.w3.org/1999/xhtml">6
<head runat="server">7
<title>无标题页</title>8

<style type="text/css">
9
.style110

{
}{11
width: 173px;12
}13
.style214

{
}{15
width: 173px;16
height: 26px;17
}18
.style419

{
}{20
}21
.style522

{
}{23
width: 103px;24
}25
.style626

{
}{27
height: 26px;28
width: 475px;29
}30
.style731

{
}{32
width: 475px;33
}34
</style>35
</head>36
<body>37
<form id="form1" runat="server">38
<div style="width: 698px; height: 214px">39
40
<table style="width: 101%; height: 206px;">41
<tr>42
<td class="style2">43
广告列表</td>44
<td class="style6">45
功能选项</td>46
</tr>47
<tr>48
<td class="style1">49
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True" Height="166px" 50
onselectedindexchanged="ListBox1_SelectedIndexChanged" Width="182px">51
</asp:ListBox>52
</td>53
<td class="style7">54
<table style="width: 100%;">55
<tr>56
<td class="style5">57
广告名字:</td>58
<td>59
<asp:TextBox ID="tb_name" runat="server" Width="330px"></asp:TextBox>60
</td>61
</tr>62
<tr>63
<td class="style5">64
广告图片:</td>65
<td>66
<asp:TextBox ID="tb_img" runat="server" Width="329px"></asp:TextBox>67
</td>68
</tr>69
<tr>70
<td class="style5">71
链接网址:</td>72
<td>73
<asp:TextBox ID="tb_link" runat="server" Width="329px"></asp:TextBox>74
</td>75
</tr>76
<tr>77
<td align="center" class="style4" colspan="2">78
<asp:Button ID="Button4" runat="server" onclick="Button4_Click" Text="创建XML文件" />79
80
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="添加" />81
82
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="修改" />83
84
<asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="删除" />85
</td>86
</tr>87
</table>88
</td>89
</tr>90
</table>91
92
</div>93
<asp:GridView ID="GridView1" runat="server" BackColor="White" 94
BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4">95
<FooterStyle BackColor="#99CCCC" ForeColor="#003399" />96
<RowStyle BackColor="White" ForeColor="#003399" />97
<PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />98
<SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />99
<HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />100
</asp:GridView>101
</form>102
</body>103
</html>104

1
using System;2
using System.Configuration;3
using System.Data;4
using System.Web;5
using System.Web.Security;6
using System.Web.UI;7
using System.Web.UI.HtmlControls;8
using System.Web.UI.WebControls;9
using System.Web.UI.WebControls.WebParts;10

11
using System.Xml;12

13
public partial class _Default : System.Web.UI.Page 14


{15
protected void Page_Load(object sender, EventArgs e)16

{//页面载入17
string fpath = Server.MapPath("~/App_Data/Ad.xml");18

19
if (System.IO.File.Exists(fpath))//如果指定的XML文件已经存在,那么就不显示创建XML文件的按钮20

{21
Button4.Visible = false;22
if(!IsPostBack)//如果页面是回发的话就不用加载了,不是回发的才加载23
Bind();24
}25

26
27
}28

29
private void Bind()30

{31
ListBox1.Items.Clear();//为了不引起加载重复值,先清理ListBox1里面的项,简单来说就是每次加载项都是全新的32
XmlDocument xd = GetXdt();33

34
//获取跟节点下的所有子节点35
//XmlNodeList xnl = xd.SelectNodes("descendant::Ad[/AdList]");//或者使用下面这句,如果不清楚意思的参考Xpath语言36
//XmlNodeList xnl = xd.SelectNodes("AdList/Ad");//再或者使用下面这句37
XmlNodeList xnl = xd.DocumentElement.ChildNodes;38
foreach (XmlNode xn in xnl)39

{40
ListBox1.Items.Add(xn.FirstChild.InnerText);41
}42

43
//========填充GridView44
string fpath = Server.MapPath("~/App_Data/Ad.xml");45
DataSet ds = new DataSet();46
ds.ReadXml(fpath);//将XML文档加载到DataSet中去, 看到这里, 我想大家应该能够想到,是否我们可以所有增删改的操作都在DataSet中来完成呢?47
GridView1.DataSource = ds.Tables[0].DefaultView;48
GridView1.DataBind();49
}50

51

/**//// <summary>52
/// 返回一个 XmlDocument 对象53
/// </summary>54
/// <returns></returns>55
private XmlDocument GetXdt()56

{57
string fpath = Server.MapPath("~/App_Data/Ad.xml");58
XmlDocument xd = new XmlDocument();59
xd.Load(fpath);60

61
return xd;62
}63
protected void Button4_Click(object sender, EventArgs e)64

{//创建XML文档65
XmlDocument xd = new XmlDocument();66
xd.LoadXml("<?xml version='1.0' encoding='utf-8' ?><AdList></AdList>");67

68
xd.Save(Server.MapPath("Ad.xml"));69
Button4.Visible = false;70
}71
protected void Button1_Click(object sender, EventArgs e)72

{//添加广告73
string fpath = Server.MapPath("~/App_Data/Ad.xml");74
XmlDocument xd = GetXdt();75

76

第一种添加节点的方法#region 第一种添加节点的方法77

/**//*78
//创建一个广告节点元素79
XmlNode xn = xd.CreateNode(XmlNodeType.Element, "Ad", null);80
//添加广告名节点81
XmlNode xnname = xd.CreateNode(XmlNodeType.Element, "Name", null);82
xnname.InnerText = tb_name.Text;83
xn.AppendChild(xnname);84
//添加广告图片地址节点85
XmlNode xnimg = xd.CreateNode(XmlNodeType.Element, "Image", null);86
xnimg.InnerText = tb_img.Text;87
xn.AppendChild(xnimg);88
//添加广告链接指向地址89
XmlNode xnlink = xd.CreateNode(XmlNodeType.Element, "Alink", null);90
xnlink.InnerText = tb_link.Text;91
xn.AppendChild(xnlink);92
* */93
#endregion94
95

第二种添加节点的方法#region 第二种添加节点的方法96

97
XmlNode xn = xd.CreateNode(XmlNodeType.Element, "Ad", null);98
xn.InnerXml = "<Name>" + tb_name.Text + "</Name><Image>" + tb_img.Text + "</Image><Alink>" + tb_link.Text + "</Alink>";99

100
#endregion101
xd.DocumentElement.AppendChild(xn);//将整个大的节点添加到跟节点下面102
xd.Save(fpath);103
Bind();104
}105
protected void Button2_Click(object sender, EventArgs e)106

{//修改节点 天轰穿的淘宝小店 http://shop.thc56.com/107
string fpath = Server.MapPath("~/App_Data/Ad.xml");108
XmlDocument xd = GetXdt();109

110
XmlNodeList xnl = xd.SelectNodes("AdList/Ad");//找到所有的单个广告节点,另外种方法参考下面ListBox1_SelectedIndexChanged方法111
foreach (XmlNode xn in xnl)//迭代所有广告112

{113
if (xn.FirstChild.InnerText == ListBox1.SelectedItem.Text)//要这样判断的前提是,你的XML文件中当前节点第一个字段肯定一定确定是ListBox1.SelectedItem.Text所显示的值114

{115
for (int i = 0; i < xn.ChildNodes.Count; i++)116

{ //循环当前节点的所有子节点117
switch (i)118

{ 119
case 0:120
xn.ChildNodes[i].InnerText = tb_name.Text;121
break;122
case 1:123
xn.ChildNodes[i].InnerText = tb_img.Text;124
break;125
case 2:126
xn.ChildNodes[i].InnerText = tb_link.Text;127
break;128
}129
}130
}131
}132

133
xd.Save(fpath);134
Bind();135
}136
protected void Button3_Click(object sender, EventArgs e)137

{//删除节点138
string fpath = Server.MapPath("~/App_Data/Ad.xml");139
XmlDocument xd = GetXdt();140

141

第一种方法,比较浪费资源 http://shop.thc56.com/#region 第一种方法,比较浪费资源 http://shop.thc56.com/142
//XmlNodeList xnl = xd.SelectNodes("AdList/Ad");143
//foreach (XmlNode xn in xnl)144
//{145
// //要下面这样判断的前提是,你的XML文件中当前节点第一个字段肯定一定确定是ListBox1.SelectedItem.Text所显示的值146
// if (xn.FirstChild.InnerText == ListBox1.SelectedItem.Text)147
// xd.DocumentElement.RemoveChild(xn);148
//}149
#endregion150

151

第二种方法,比较直接,建议学习下Xpath相关的知识#region 第二种方法,比较直接,建议学习下Xpath相关的知识152
string xpath = "/AdList/Ad[Name='" + ListBox1.SelectedItem.Text + "']";153
XmlNode xn = xd.SelectSingleNode(xpath);154

155
xn.ParentNode.RemoveChild(xn);156
#endregion157

158

159
xd.Save(fpath);160
Bind();161
}162
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)163

{//点击广告填充右边文本框 http://shop.thc56.com/164
XmlDocument xd = GetXdt();165

166

第一种方法#region 第一种方法167
//XmlNodeList xnl = xd.SelectNodes("AdList/Ad");//找到所有的单个广告节点168
//foreach (XmlNode xn in xnl)//迭代所有广告169
//{170
// if (xn.FirstChild.InnerText == ListBox1.SelectedItem.Text)//要这样判断的前提是,你的XML文件中当前节点第一个字段肯定一定确定是ListBox1.SelectedItem.Text所显示的值,否则你别骂川哥哥骗你哈,俺绝对是好人171
// {172
// for (int i = 0; i < xn.ChildNodes.Count; i++)173
// { //循环当前节点的所有子节点174
// switch (i)175
// {176
// case 0:177
// tb_name.Text = xn.ChildNodes[i].InnerText;178
// break;179
// case 1:180
// tb_img.Text = xn.ChildNodes[i].InnerText;181
// break;182
// case 2:183
// tb_link.Text = xn.ChildNodes[i].InnerText;184
// break;185
// }186
// }187
// }188
//}189
#endregion190

191

第二种方法#region 第二种方法192
string xpath = "/AdList/Ad[Name='" + ListBox1.SelectedItem.Text + "']";193
XmlNode xn = xd.SelectSingleNode(xpath);194

195
for (int i = 0; i < xn.ChildNodes.Count; i++)196

{ //循环当前节点的所有子节点197
switch (i)198

{199
case 0:200
tb_name.Text = xn.ChildNodes[i].InnerText;201
break;202
case 1:203
tb_img.Text = xn.ChildNodes[i].InnerText;204
break;205
case 2:206
tb_link.Text = xn.ChildNodes[i].InnerText;207
break;208
}209
}210
#endregion211
}212
}213

浙公网安备 33010602011771号