天轰穿.net/vs2005/ajax入门 -- 穷则独善其身,达则兼济天下
为中国的计算机行业贡献自己的一点微薄之力!!战胜自己-否定自己-完善自己 -->支持我就点我的广告吧!谢谢大家!
赈灾企业爱心榜,花钱之前请先查看这里确定品牌!!
交流学习论坛 Www.Thc123.Net.Cn
posts - 345, comments - 6372, trackbacks - 270, articles - 1
博客园
::
首页
::
新随笔
:: ::
订阅
::
管理
使用XmlDocument类完成对XML的查、删、添、改(不完美,望指教)
Posted on 2006-05-06 17:41
天轰穿
阅读(3944)
评论(12)
编辑
收藏
所属分类:
学习笔记
、
例题下载
该例题是微软广播中邵志东老师的,但是我发觉有两个小问题,一是删除,如果有相同记录,他总是删除相同记录的最前面一条,另外,删除使用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)
//
再迭代