该例题是微软广播中邵志东老师的,但是我发觉有两个小问题,一是删除,如果有相同记录,他总是删除相同记录的最前面一条,另外,删除使用RemoveAll方法,他就不删除默认属性,说白了就是不删除一级节点(不是根节点),这个我有个思路,但是不知道怎么实施(把一级节点元素化,然后删除这个,这样就不会删除根节点了) ,万望知道的朋友告诉我下,感激不尽!!我QQ 110535808

前台HTML代码
1
<%
@ Page language="c#" Codebehind="xdoc.aspx.cs" AutoEventWireup="false" Inherits="XML.xdoc" %>
2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
3
<HTML>
4
<HEAD>
5
<title>xdoc</title>
6
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
7
<meta content="C#" name="CODE_LANGUAGE">
8
<meta content="JavaScript" name="vs_defaultClientScript">
9
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
10
</HEAD>
11
<body MS_POSITIONING="GridLayout">
12
<form id="Form1" method="post" runat="server">
13
<FONT face="宋体">
14
<asp:datagrid id="dg" style="Z-INDEX: 101; LEFT: 48px; POSITION: absolute; TOP: 56px" runat="server"
15
ForeColor="Black" BorderStyle="None" BorderWidth="1px" BorderColor="#DEDFDE" BackColor="White"
16
CellPadding="4" GridLines="Vertical" AutoGenerateColumns="False" Width="432px">
17
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#CE5D5A"></SelectedItemStyle>
18
<AlternatingItemStyle BackColor="White"></AlternatingItemStyle>
19
<ItemStyle BackColor="#F7F7DE"></ItemStyle>
20
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#6B696B"></HeaderStyle>
21
<FooterStyle BackColor="#CCCC99"></FooterStyle>
22
<Columns>
23
<asp:BoundColumn DataField="name" HeaderText="名字"></asp:BoundColumn>
24
<asp:BoundColumn DataField="City" HeaderText="城市"></asp:BoundColumn>
25
<asp:BoundColumn DataField="Email" HeaderText="邮件地址"></asp:BoundColumn>
26
<asp:BoundColumn DataField="Time" HeaderText="时间"></asp:BoundColumn>
27
</Columns>
28
<PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#F7F7DE" Mode="NumericPages"></PagerStyle>
29
</asp:datagrid><asp:label id="Label1" style="Z-INDEX: 102; LEFT: 112px; POSITION: absolute; TOP: 8px" runat="server"
30
Width="336px" BorderWidth="2px" BorderStyle="Ridge" Font-Size="X-Large" Font-Bold="True" ForeColor="Red">XmlDocument类的挖掘</asp:label><asp:dropdownlist id="ddl" style="Z-INDEX: 103; LEFT: 128px; POSITION: absolute; TOP: 280px" runat="server"></asp:dropdownlist><asp:label id="Label2" style="Z-INDEX: 104; LEFT: 64px; POSITION: absolute; TOP: 280px" runat="server">姓名:</asp:label><asp:button id="Button1" style="Z-INDEX: 105; LEFT: 64px; POSITION: absolute; TOP: 328px" runat="server"
31
Width="64px" Text="查询"></asp:button><asp:label id="Label3" style="Z-INDEX: 106; LEFT: 64px; POSITION: absolute; TOP: 384px" runat="server">邮件地址:</asp:label><asp:button id="Button2" style="Z-INDEX: 107; LEFT: 152px; POSITION: absolute; TOP: 328px" runat="server"
32
Width="64px" Text="删除"></asp:button><asp:button id="Button3" style="Z-INDEX: 108; LEFT: 432px; POSITION: absolute; TOP: 280px" runat="server"
33
Width="56px" Text="添加" Height="80px"></asp:button><asp:textbox id="tbn" style="Z-INDEX: 109; LEFT: 152px; POSITION: absolute; TOP: 384px" runat="server"
34
Width="328px"></asp:textbox><asp:button id="Button4" style="Z-INDEX: 110; LEFT: 64px; POSITION: absolute; TOP: 416px" runat="server"
35
Width="424px" Text="修改邮件地址"></asp:button>
36
<asp:TextBox id="tbna" style="Z-INDEX: 111; LEFT: 312px; POSITION: absolute; TOP: 280px" runat="server"
37
Width="104px"></asp:TextBox>
38
<asp:TextBox id="tbc" style="Z-INDEX: 112; LEFT: 312px; POSITION: absolute; TOP: 312px" runat="server"
39
Width="104px" Height="24px"></asp:TextBox>
40
<asp:TextBox id="tbe" style="Z-INDEX: 113; LEFT: 312px; POSITION: absolute; TOP: 344px" runat="server"
41
Width="104px" Height="24px"></asp:TextBox>
42
<asp:Label id="Label4" style="Z-INDEX: 114; LEFT: 264px; POSITION: absolute; TOP: 280px" runat="server">姓名:</asp:Label>
43
<asp:Label id="Label5" style="Z-INDEX: 115; LEFT: 264px; POSITION: absolute; TOP: 312px" runat="server">城市:</asp:Label>
44
<asp:Label id="Label6" style="Z-INDEX: 116; LEFT: 264px; POSITION: absolute; TOP: 344px" runat="server">Email:</asp:Label></FONT></form>
45
</body>
46
</HTML>
47

后台C#代码
1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Web;
7
using System.Web.SessionState;
8
using System.Web.UI;
9
using System.Web.UI.WebControls;
10
using System.Web.UI.HtmlControls;
11
//新引入两个命名空间
12
using System.Xml;
13
using System.Xml.XPath;
14
15
namespace XML
16

{
17
/**//// <summary>
18
/// xdoc 的摘要说明。
19
/// </summary>
20
public class xdoc : System.Web.UI.Page
21
{
22
protected System.Web.UI.WebControls.Label Label1;
23
protected System.Web.UI.WebControls.Label Label2;
24
protected System.Web.UI.WebControls.Button Button1;
25
protected System.Web.UI.WebControls.Label Label3;
26
protected System.Web.UI.WebControls.Button Button2;
27
protected System.Web.UI.WebControls.Button Button3;
28
protected System.Web.UI.WebControls.DataGrid dg;
29
protected System.Web.UI.WebControls.DropDownList ddl;
30
protected System.Web.UI.WebControls.TextBox tbn;
31
protected System.Web.UI.WebControls.Label Label4;
32
protected System.Web.UI.WebControls.Label Label5;
33
protected System.Web.UI.WebControls.Label Label6;
34
protected System.Web.UI.WebControls.TextBox tbna;
35
protected System.Web.UI.WebControls.TextBox tbc;
36
protected System.Web.UI.WebControls.TextBox tbe;
37
protected System.Web.UI.WebControls.Button Button4;
38
39
private void Page_Load(object sender, System.EventArgs e)
40
{//看动作名字就知道了是载入了
41
if(!Page.IsPostBack)
42
{
43
fill();
44
}
45
}
46
47
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
48
override protected void OnInit(EventArgs e)
49
{
50
//
51
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
52
//
53
InitializeComponent();
54
base.OnInit(e);
55
}
56
57
/**//// <summary>
58
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
59
/// 此方法的内容。
60
/// </summary>
61
private void InitializeComponent()
62
{
63
this.Button1.Click += new System.EventHandler(this.Button1_Click);
64
this.Button2.Click += new System.EventHandler(this.Button2_Click);
65
this.Button3.Click += new System.EventHandler(this.Button3_Click);
66
this.Button4.Click += new System.EventHandler(this.Button4_Click);
67
this.Load += new System.EventHandler(this.Page_Load);
68
69
}
70
#endregion
71
72
private void fill()
73
{//绑定方法
74
DataSet ds=new DataSet();
75
ds.ReadXml(Server.MapPath("//xml//xml//doc.xml"));
76
dg.DataSource=ds.Tables[0];
77
dg.DataBind();
78
XmlDocument xd=new XmlDocument();
79
xd.Load(Server.MapPath("//xml//xml//doc.xml"));
80
System.Xml.XmlNodeList xnl=xd.GetElementsByTagName("Name");
81
ddl.Items.Clear();
82
for(int i=0;i<xnl.Count;i++)
83
{
84
ddl.Items.Add(xnl[i].InnerText);
85
}
86
}
87
88
private void Button1_Click(object sender, System.EventArgs e)
89
{//查询动作
90
XmlDocument xd=new XmlDocument();
91
xd.Load(Server.MapPath("//xml//xml//doc.xml"));
92
tbn.Text=xd.SelectSingleNode("//User[Name='"+ddl.SelectedItem.Text+"']").ChildNodes.Item(2).InnerText.ToString();
93
94
}
95
96
private void Button2_Click(object sender, System.EventArgs e)
97
{//删除动作
98
XmlDocument xdoc=new XmlDocument();
99
xdoc.Load(Server.MapPath("//xml//xml//doc.xml"));
100
XmlNodeList xnl=xdoc.SelectSingleNode("dbGuest").ChildNodes;
101
102
foreach(XmlNode xn in xnl)
103
{
104
XmlElement xe=(XmlElement)xn;
105
XmlNodeList node=xe.GetElementsByTagName("Name");//查找他的Name行
106
if(node.Count>0)
107
{
108
if(node[0].InnerText==ddl.SelectedItem.Text)//如果当前节点的名字和下拉列表传来的一样,就删除
109
{
110
xe.RemoveAll();//删除节点的所有指定属性和子集,但是不删除默认属性,我很郁闷,不知道怎么连属性一起删除,如果有朋友知道,请一定告诉我下,谢谢了!
111
112
}
113
break;
114
}
115
116
}
117
xdoc.Save(Server.MapPath("//xml//xml//doc.xml"));
118
fill();
119
}
120
121
private void Button3_Click(object sender, System.EventArgs e)
122
{//添加动作
123
string name=this.tbna.Text.ToString();
124
string city=this.tbc.Text.ToString();
125
string email=this.tbe.Text.ToString();
126
127
XmlDocument xd=new XmlDocument();
128
xd.Load(Server.MapPath("//xml//xml//doc.xml"));
129
//查找dbGuest节点
130
XmlNode xn=xd.SelectSingleNode("dbGuest");
131
//创建user节点
132
XmlElement xe_u=xd.CreateElement("User");
133
//创建一个name元素
134
XmlElement xe_a1=xd.CreateElement("Name");
135
xe_a1.InnerText=name;//设置该元素的值
136
xe_u.AppendChild(xe_a1);//把刚才创建的元素插入name节点里面去
137
XmlElement xe_a2=xd.CreateElement("City");
138
xe_a2.InnerText=city;
139
xe_u.AppendChild(xe_a2);
140
XmlElement xe_a3=xd.CreateElement("Email");
141
xe_a3.InnerText=email;
142
xe_u.AppendChild(xe_a3);
143
XmlElement xe_a4=xd.CreateElement("Time");
144
xe_a4.InnerText=(DateTime.Now).ToString();
145
xe_u.AppendChild(xe_a4);
146
//将User节点插入到dbGuest
147
xn.AppendChild(xe_u);
148
//保存XML文件
149
xd.Save(Server.MapPath("//xml//xml//doc.xml"));
150
fill();
151
}
152
153
private void Button4_Click(object sender, System.EventArgs e)
154
{//修改邮件地址动作
155
XmlDocument xd=new XmlDocument();
156
xd.Load(Server.MapPath("//xml//xml//doc.xml"));//载入XML文件
157
XmlNodeList xnl=xd.SelectSingleNode("dbGuest").ChildNodes;//获取dbGuest节点的全部子节点
158
foreach(XmlNode xn in xnl)//迭代所有子节点
159
{
160
XmlElement xe=(XmlElement)xn;//将迭代到的子节点转换成XmlElement类型
161
XmlNodeList xnl2=xe.GetElementsByTagName("Name");//返回所有Name列的数据
162
if(xnl2.Count>0)//如果大于零就表示有撒,
163
{
164
if(xnl2[0].InnerText==ddl.SelectedItem.Text)//如果该列有和被下拉列表中返回的值一样的数据的话
165
{
166
XmlNodeList xnl3=xe.ChildNodes;//再获取下面所有的子节点
167
foreach(XmlNode xn1 in xnl3)//再迭代子集
168
{
169
XmlElement xe2=(XmlElement)xn1;//转换类型
170
if(xe2.Name=="Email")//如果节点名字是Email的话
171
{
172
xe2.InnerText=tbn.Text;//该节点的值就替换成文本框中的
173
break;
174
}
175
}
176
break;
177
}
178
}
179
}
180
xd.Save(Server.MapPath("//xml//xml//doc.xml"));
181
fill();
182
}
183
}
184
}
185

XML文件代码
1
<?xml version="1.0" encoding="utf-8"?>
2
<dbGuest>
3
<User>
4
<Name>天轰穿</Name>
5
<City>江油</City>
6
<Email>7665@fds.com</Email>
7
<Time>2006-5-6 16:10:56</Time>
8
</User>
9
<User>
10
<Name>田洪川</Name>
11
<City>绵阳</City>
12
<Email>th@DFs.com</Email>
13
<Time>2006-5-6 16:06:51</Time>
14
</User>
15
<User>
16
<Name>黄小梅</Name>
17
<City>南充</City>
18
<Email>5543@ds.com</Email>
19
<Time>2006-5-6 16:07:15</Time>
20
</User>
21
</dbGuest>


1



2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16



17


18

19

20

21



22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40



41

42



43

44

45

46

47


48

49



50

51

52

53

54

55

56

57


58

59

60

61

62



63

64

65

66

67

68

69

70

71

72

73



74

75

76

77

78

79

80

81

82

83



84

85

86

87

88

89



90

91

92

93

94

95

96

97



98

99

100

101

102

103



104

105

106

107



108

109



110

111

112

113

114

115

116

117

118

119

120

121

122



123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154



155

156

157

158

159



160

161

162

163



164

165



166

167

168



169

170

171



172

173

174

175

176

177

178

179

180

181

182

183

184

185



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
