WinForm编程之XML读写
来源:互联网 发布:java算法相关书籍 编辑:程序博客网 时间:2024/06/18 00:07
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Web;
5 using System.Web.Security;
6 using System.Web.UI;
7 using System.Web.UI.WebControls;
8 using System.Web.UI.WebControls.WebParts;
9 using System.Web.UI.HtmlControls;
10using System.Collections;
11
12 //引用命名空间
13 using System.Xml;
14
16 namespace xmlOp
17 {
18 ///<summary>
19 /// XmlOp类提供对XML数据库的读写
20 ///</summary>
21 public class XmlOp
22 {
23 //声明一个XmlDocument空对象
24 protected XmlDocument XmlDoc = newXmlDocument();
25
26 /// <summary>
27 /// 构造函数,导入Xml文件
28 /// </summary>
29 /// <paramname="xmlFile">文件虚拟路径</param>
30 public XmlOp(string xmlFile)
31 {
32 try
33 {
34 XmlDoc.Load(GetXmlFilePath(xmlFile)); //载入Xml文档
35 }
36 catch (System.Exception ex)
37 {
38 throw ex;
39 }
40 }
41 /// <summary>
42 /// 析构函数
43 /// </summary>
44 ~XmlOp()
45 {
46 XmlDoc = null; //释放XmlDocument对象
47 }
48
49 /// <summary>
50 /// 保存文件
51 /// </summary>
52 /// <paramname="filePath">文件虚拟路径</param>
53 public void Save(string filePath)
54 {
55 try
56 {
57 XmlDoc.Save(GetXmlFilePath(filePath));
58 }
59 catch (System.Exception ex)
60 {
61 throw ex;
62 }
63 }
64
65 /// <summary>
66 /// 返回Xml文件实际路径
67 /// </summary>
68 /// <paramname="xmlFile">文件虚拟路径</param>
69 /// <returns></returns>
70 public string GetXmlFilePath(string xmlFile)
71 {
72 return HttpContext.Current.Server.MapPath(xmlFile);
73 }
74
75 /// <summary>
76 /// 根据Xml文件的节点路径,返回一个DataSet数据集
77 /// </summary>
78 /// <paramname="XmlPathNode">Xml文件的某个节点</param>
79 /// <returns></returns>
80 public DataSet GetDs(string XmlPathNode)
81 {
82 DataSet ds =new DataSet();
83 try
84 {
85 System.IO.StringReader read = newSystem.IO.StringReader(XmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
86 ds.ReadXml(read); //利用DataSet的ReadXml方法读取StringReader文件流
87 read.Close();
88 }
89 catch
90 { }
91 return ds;
92 }
93
94 /// <summary>
95 /// 属性查询,返回属性值
96 /// </summary>
97 /// <paramname="XmlPathNode">属性所在的节点</param>
98 /// <paramname="Attrib">属性</param>
99 /// <returns></returns>
100 public string SelectAttrib(string XmlPathNode, string Attrib)
101 {
102 string _strNode="";
103 try
104 {
105 _strNode = XmlDoc.SelectSingleNode(XmlPathNode).Attributes[Attrib].Value;
106 }
107 catch
108 { }
109 return _strNode;
110 }
111
112 /// <summary>
113 /// 节点查询,返回节点值
114 /// </summary>
115 /// <paramname="XmlPathNode">节点的路径</param>
116 /// <returns></returns>
117 public string SelectNodeText(string XmlPathNode)
118 {
119 string _nodeTxt = XmlDoc.SelectSingleNode(XmlPathNode).InnerText;
120 if (_nodeTxt == null|| _nodeTxt == "")
121 return "";
122 else
123 return _nodeTxt;
124 }
125
126 /// <summary>
127 /// 节点值查询判断
128 /// </summary>
129 /// <paramname="XmlPathNode">父节点</param>
130 /// <paramname="index">节点索引</param>
131 /// <paramname="NodeText">节点值</param>
132 /// <returns></returns>
133 public bool SelectNode(string XmlPathNode, int index, string NodeText)
134 {
135 try
136 {
137 XmlNodeList _NodeList =XmlDoc.SelectNodes(XmlPathNode);
138 //循环遍历节点,查询是否存在该节点
139 for (inti = 0; i< _NodeList.Count; i++)
140 {
141 if (_NodeList[i].ChildNodes[index].InnerText== NodeText)
142 {
143 return true;
144 break;
145 }
146 }
147 }
148 catch
149 {
150 }
151 return false;
152 }
153
154 /// <summary>
155 /// 获取子节点个数
156 /// </summary>
157 /// <paramname="XmlPathNode">父节点</param>
158 /// <returns></returns>
159 public int NodeCount(string XmlPathNode)
160 {
161 int i =0;
162 try
163 {
164 i =XmlDoc.SelectSingleNode(XmlPathNode).ChildNodes.Count;
165 }
166 catch
167 {
168 i =0;
169 }
170 return i;
171 }
172
173 /// <summary>
174 /// 更新一个节点的内容
175 /// </summary>
176 /// <paramname="XmlPathNode">节点的路径</param>
177 /// <paramname="Content">新的节点值</param>
178 /// <returns></returns>
179 public bool UpdateNode(string XmlPathNode,string NodeContent)
180 {
181 try
182 {
183 XmlDoc.SelectSingleNode(XmlPathNode).InnerText = NodeContent;
184 return true;
185 }
186 catch
187 {
188 return false;
189 }
190 }
191
192 /// <summary>
193 /// 更新N个节点值
194 /// </summary>
195 /// <paramname="XmlParentNode">父节点</param>
196 /// <paramname="XmlNode">子节点</param>
197 /// <paramname="NodeContent">子节点内容</param>
198 /// <returns></returns>
199 public bool UpdateNode(string XmlParentNode, string[]XmlNode, string[]NodeContent)
200 {
201 try
202 {
203 //根据节点数组循环修改节点值
204 for (inti = 0; i< XmlNode.Length; i++)
205 {
206 XmlDoc.SelectSingleNode(XmlParentNode +"/"+XmlNode[i]).InnerText = NodeContent[i];
207 }
208 return true;
209 }
210 catch
211 {
212 return false;
213 }
214 }
215
216 /// <summary>
217 /// 修改属性
218 /// </summary>
219 /// <paramname="XmlPathNode">属性所在的节点</param>
220 /// <paramname="Attrib">属性名</param>
221 /// <paramname="Content">属性值</param>
222 /// <returns></returns>
223 public bool UpdateAttrib(string XmlPathNode, string Attrib,string AttribContent)
224 {
225 try
226 {
227 //修改属性值
228 XmlDoc.SelectSingleNode(XmlPathNode).Attributes[Attrib].Value = AttribContent;
229 return true;
230 }
231 catch
232 {
233 return false;
234 }
235 }
236
238 /// <summary>
239 /// 添加属性
240 /// </summary>
241 /// <paramname="MainNode">属性所在节点</param>
242 /// <paramname="Attrib">属性名</param>
243 /// <paramname="AttribContent">属性值</param>
244 /// <returns></returns>
245 public bool InsertAttrib(string MainNode,string Attrib, string AttribContent)
246 {
247 try
248 {
249 XmlElement objNode =(XmlElement)XmlDoc.SelectSingleNode(MainNode);//强制转化成XmlElement对象
250 objNode.SetAttribute(Attrib,AttribContent); //XmlElement对象添加属性方法
251 return true;
252 }
253 catch
254 {
255 return false;
256 }
257 }
258
260 /// <summary>
261 /// 插入一个节点,带N个子节点
262 /// </summary>
263 /// <paramname="MainNode">插入节点的父节点</param>
264 /// <paramname="ChildNode">插入节点的元素名</param>
265 /// <paramname="Element">插入节点的子节点名数组</param>
266 /// <paramname="Content">插入节点的子节点内容数组</param>
267 /// <returns></returns>
268 public bool InsertNode(string MainNode, string ChildNode, string[]Element, string[]Content)
269 {
270 try
271 {
272 XmlNode objRootNode =XmlDoc.SelectSingleNode(MainNode); //声明XmlNode对象
273 XmlElement objChildNode = XmlDoc.createElement_x(ChildNode); //创建XmlElement对象
274 objRootNode.A(objChildNode);
275 for (inti = 0; i< Element.Length; i++) //循环插入节点元素
276 {
277 XmlElement objElement =XmlDoc.createElement_x(Element[i]);
278 objElement.InnerText =Content[i];
279 objChildNode.A(objElement);
280 }
281 return true;
282 }
283 catch
284 {
285 return false;
286 }
287 }
288
289 /// <summary>
290 /// 删除一个节点
291 /// </summary>
292 /// <paramname="Node">要删除的节点</param>
293 /// <returns></returns>
294 public bool DeleteNode(string Node)
295 {
296 try
297 {
298 //XmlNode的RemoveChild方法来删除节点及其所有子节点
299 XmlDoc.SelectSingleNode(Node).ParentNode.RemoveChild(XmlDoc.SelectSingleNode(Node));
300 return true;
301 }
302 catch
303 {
304 return false;
305 }
306 }
307 }
308 }
309 XmlDocumentxmlDoc=new XmlDocument();
xmlDoc.Load("bookstore.xml"); XmlNoderoot=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
XmlElementxe1=xmlDoc.createElement_x("book");//创建一个<book>节点
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性 XmlElementxesub1=xmlDoc.createElement_x("title");
xesub1.InnerText="CS从入门到精通";//设置文本节点
xe1.A(xesub1);//添加到<book>节点中
XmlElementxesub2=xmlDoc.createElement_x("author");
xesub2.InnerText="候捷";
xe1.A(xesub2);
XmlElementxesub3=xmlDoc.createElement_x("price");
xesub3.InnerText="58.3";
xe1.A(xesub3); root.A(xe1);//添加到<bookstore>节点中
xmlDoc.Save("bookstore.xml"); XmlNodeListnodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
foreach(XmlNodexn in nodeList)//遍历所有子节点
{
XmlElementxe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”
{
xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红” XmlNodeListnls=xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach(XmlNodexn1 in nls)//遍历
{
XmlElementxe2=(XmlElement)xn1;//转换类型
if(xe2.Name=="author")//如果找到
{
xe2.InnerText="亚胜";//则修改
break;//找到退出来就可以了
}
}
break;
}
} xmlDoc.Save("bookstore.xml");//保存。 foreach(XmlNodexn in xnl)
{
XmlElementxe=(XmlElement)xn;
if(xe.GetAttribute("genre")=="fantasy")
{
xe.RemoveAttribute("genre");//删除genre属性
}
elseif(xe.GetAttribute("genre")=="update李赞红")
{
xe.RemoveAll();//删除该节点的全部内容
}
}
xmlDoc.Save("bookstore.xml"); XmlNodexn=xmlDoc.SelectSingleNode("bookstore"); XmlNodeListxnl=xn.ChildNodes;
foreach(XmlNodexnf in xnl)
{
XmlElementxe=(XmlElement)xnf;
Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
Console.WriteLine(xe.GetAttribute("ISBN")); XmlNodeListxnf1=xe.ChildNodes;
foreach(XmlNodexn2 in xnf1)
{
Console.WriteLine(xn2.InnerText);//显示子节点点文本
}
}
10using System.Collections;
11
12 //引用命名空间
13 using System.Xml;
14
16 namespace xmlOp
17 {
18 ///<summary>
19 /// XmlOp类提供对XML数据库的读写
20 ///</summary>
21
22
24
25
26
27
28
29
30
31
33
35
37
39
42
43
44
45
47
49
50
51
52
53
54
56
60
62
65
66
67
68
69
70
71
73
75
76
77
78
79
80
81
83
84
86
87
90
92
94
95
96
97
98
99
100
101
103
104
106
108
110
112
113
114
115
116
117
118
120
121
122
123
124
126
127
128
129
130
131
132
133
134
136
138
139
140
142
144
145
149
152
154
155
156
157
158
159
160
162
163
167
169
171
173
174
175
176
177
178
179
180
182
184
185
187
189
192
193
194
195
196
197
198
199
200
202
204
205
207
209
211
213
216
217
218
219
220
221
222
223
224
226
228
229
230
232
234
238
239
240
241
242
243
244
245
246
248
250
251
252
254
256
260
261
262
263
264
265
266
267
268
269
271
273
274
276
278
279
282
284
286
289
290
291
292
293
294
295
297
299
301
303
305
309
园子里面有类似的代码http://www.cnblogs.com/somesongs/archive/2009/01/22/xmlhelper.html,不过这个没有给出具体方法体,所以没法看到释放资源的那块,本来就是想看看怎么处理性能问题的。下面是一些具体例子。
已知有一个XML文件(bookstore.xml)如下:
<?xmlversion="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy"ISBN="2-3631-4">
<title>Oberon'sLegacy</title>
<author>Corets,Eva</author>
<price>5.95</price>
</book>
</bookstore>
<bookstore>
</bookstore>
1、往<bookstore>节点中插入一个<book>节点:
//===============================================
结果为:
<?xmlversion="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy"ISBN="2-3631-4">
<title>Oberon'sLegacy</title>
<author>Corets,Eva</author>
<price>5.95</price>
</book>
<book genre="李赞红"ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>候捷</author>
<price>58.3</price>
</book>
</bookstore>
<bookstore>
</bookstore>
2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。
//==================================================
最后结果为:
<?xmlversion="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy"ISBN="2-3631-4">
<title>Oberon'sLegacy</title>
<author>Corets,Eva</author>
<price>5.95</price>
</book>
<book genre="update李赞红"ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>亚胜</author>
<price>58.3</price>
</book>
</bookstore>
<bookstore>
</bookstore>
3、删除 <bookgenre="fantasy" ISBN="2-3631-4">节点的genre属性,删除<book genre="update李赞红"ISBN="2-3631-4">节点。
XmlNodeListxnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;
//===========================================
最后结果为:
最后结果为:
<?xmlversion="1.0" encoding="gb2312"?>
<bookstore>
<bookISBN="2-3631-4">
<title>Oberon'sLegacy</title>
<author>Corets,Eva</author>
<price>5.95</price>
</book>
<book>
</book>
</bookstore>
<bookstore>
</bookstore>
4、显示所有数据。
转自:http://www.cnblogs.com/tylerdonet/archive/2010/12/16/1908691.html
0 0
- WinForm编程之XML读写
- C# XML读写---Winform
- C# WinForm 读写XML文件
- Perl编程之基于XML::XPath和XML::Simple的XML文件读写浅析
- XML读写之DOM
- XML读写之DOM4J
- XML读写之SAX
- XML读写之JDOM
- C# WINFORM 应用程序动态读写xml config文件,获取数据库连接
- C# WINFORM 应用程序动态读写xml config文件,获取数据库连接
- c# winform app.config xml 配置文件 读写操作
- Winform 动态读写xml config文件,连接数据库(postgresql)
- C#之Winform编程01
- XML读写操作之DOM4J
- XML读写操作之DOM
- XML读写操作之SAX
- XML读写操作之JDOM
- 线程编程之读写锁
- obj-c 开发相关基本名词解释…
- sql server sysobjects&…
- SQLServer如何用T—SQL命令查询一个…
- fopen , fread fwr…
- 虚拟机无法找到内核 无…
- WinForm编程之XML读写
- WinForm编程之计算机的重启与关机
- 我的博客今天2岁38天了,我领取了…
- Excel数据导入Sql Server 2000的方…
- WIN7系统搭建FTP服务器
- 略谈SDK编程
- 委托的妙文_让你知道如何发挥委托…
- C# 如何在 Windows&nbsp…
- Java连接数据库的两种模式