All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
在ASP.NET中访问SQL,2005报表服务_[Asp.Net教程]
PHP+MySQL扎实基本功_[PHP教程]
新瓶旧酒ASP.NET,AJAX(2),-,客户端脚本编程(命名空间、类、成员、接口、继承、枚举)_[Asp.Net教程]
修改Zend引擎实现PHP源码加密的原理及实践_php资料_编程技术
Sparks.com用XML和XSL来生成动态页面_[XML教程]
Visual,Studio,2008系列教程(一)-VS,2008安装详解!_[Asp.Net教程]
PHP初学入门:IIS中如何安装和配置PHP_php资料_编程技术
php程序如何生成验证码图片_php资料_编程技术
Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法_.net资料_编程技术
ASP.NET中为DataGrid添加单选框_[Asp.Net教程]
Reading number is top 10 pictures
清纯性感的美眉1
The goddess of the single reason1
2012 national geographic daily picture6
去瑜伽会所面试的经过
Sora aoi in China3
On the verge of extinction of the beach1
The money of more than 100 countries and regions16
China's zhejiang university to create the world's most light material
这才是真正的人体艺术3
Breasts woman big set 1
Download software ranking
1400篇各类破解文章
Eclipse 4.2.1 For Win32
c#程序设计案例教程
天龙八部十二宫服务端
jdk1.5
Prostitutes diary
Red cliff
Unix video tutorial5
Tram sex maniac 2 (H) rar bag13
VC++6.0培训教程
aaa published in(发表于) 2013/12/6 10:16:35 Edit(编辑)
.net操纵xml文件类

.net操纵xml文件类(c#)_.net资料_编程技术-数科优化网

.net操纵xml文件类(c#)_.net资料_编程技术-数科优化网

一直想要写一个操作XML文件的类,今天在网上找了一下,找到一个已写的差不多的类,对其进行扩展与修改,最终成了以下代码,供新手参考参考.
//
在此类中用到了XML事件.此类中对于节点的查找必需用xpath表达式,如果你对xpath表达式不了解可以查看我收藏的另外一篇文章:+XML文件操作:[学习xpath]XPath最通俗的教程+


1using System;
2using System.Xml;
3using System.Web;
4namespace solucky
5{
6 /**////


7 /// 必需用XPATH表达式来获取相应节点
8 /// 关于xpath可以参见:
9 ///

10 public class MyXml
11 {
12 变量#region 变量
13 /**////
14 /// xml文件所在路径类型
15 ///

16 /// xml文件所在路径类型
17 public enum enumXmlPathType
18 {
19 /**////
20 /// 绝对路径
21 ///

22 AbsolutePath,
23 /**////
24 /// 虚拟路径
25 ///

26 VirtualPath
27 }
28
29 private string xmlFilePath ;
30 private enumXmlPathType xmlFilePathType ;
31 private XmlDocument xmlDoc = new XmlDocument() ;
32 #endregion
33
34
35 属性#region 属性
36 /**////
37 /// 文件路径
38 ///

39 /// 文件路径
40 public string XmlFilePath
41 {
42 get
43 {
44 return this.xmlFilePath;
45 }
46 set
47 {
48 xmlFilePath = value ;
49
50 }
51 }
52
53 /**////
54 /// 文件路径类型
55 ///

56 public enumXmlPathType XmlFilePathTyp
57 {
58 set
59 {
60 xmlFilePathType = value ;
61 }
62 }
63 #endregion
64
65 构造函数#region 构造函数
66 /**////
67 ///
68 ///

69 ///
70 public MyXml( string tempXmlFilePath )
71 {
72 //
73 // TODO: 在此处添加构造函数逻辑
74 //
75
76 this.xmlFilePathType = enumXmlPathType.VirtualPath ;
77 this.xmlFilePath = tempXmlFilePath ;
78 GetXmlDocument() ;
79 //xmlDoc.Load( xmlFilePath ) ;
80 }
81
82 /**////
83 /// 构造函数
84 ///

85 /// 文件路径
86 /// 类型
87 public MyXml( string tempXmlFilePath , enumXmlPathType tempXmlFilePathType )
88 {
89 //
90 // TODO: 在此处添加构造函数逻辑
91 //
92 this.xmlFilePathType = tempXmlFilePathType ;
93 this.xmlFilePath = tempXmlFilePath ;
94 GetXmlDocument() ;
95 }
96 #endregion
97
98
99 /**////
100 ///获取XmlDocument实体类
101 ///

102 /// 指定的XML描述文件的一个xmldocument实例
103 private XmlDocument GetXmlDocument()
104 {
105 XmlDocument doc=null;
106
107 if( this.xmlFilePathType == enumXmlPathType.AbsolutePath )
108 {
109 doc = GetXmlDocumentFromFile( xmlFilePath ) ;
110 }
111 else if( this.xmlFilePathType == enumXmlPathType.VirtualPath )
112 {
113 doc = GetXmlDocumentFromFile(HttpContext.Current.Server.MapPath(xmlFilePath)) ;
114 }
115 return doc;
116 }
117
118 private XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath)
119 {
120 string xmlFileFullPath = tempXmlFilePath ;
121 xmlDoc.Load(xmlFileFullPath) ;
122 //定义事件处理
123 xmlDoc.NodeChanged += new XmlNodeChangedEventHandler(this.nodeUpdateEvent);
124 xmlDoc.NodeInserted += new XmlNodeChangedEventHandler(this.nodeInsertEvent);
125 xmlDoc.NodeRemoved += new XmlNodeChangedEventHandler(this.nodeDeleteEvent);
126 return xmlDoc ;
127 }
128
129 读取指定节点的指定属性值#region 读取指定节点的指定属性值
130 /**////
131 /// 功能:
132 /// 读取指定节点的指定属性值
133 ///

134 /// 节点名称
135 /// 此节点的属性
136 ///
137 public string GetXmlNodeAttributeValue(string strNode,string strAttribute)
138 {
139 string strReturn = "";
140 try
141 {
142 //根据指定路径获取节点
143 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ;
144 if (!(xmlNode==null))
145 {//获取节点的属性,并循环取出需要的属性值
146 XmlAttributeCollection xmlAttr = xmlNode.Attributes ;
147
148 for(int i=0 ;i149 {
150 if (xmlAttr.Item(i).Name == strAttribute)
151 {
152 strReturn = xmlAttr.Item(i).Value ;
153 break;
154 }
155 }
156 }
157 }
158 catch(XmlException xmle)
159 {
160 throw xmle ;
161 }
162 return strReturn ;
163 }
164 #endregion
165
166
167 读取指定节点的值#region 读取指定节点的值
168 /**////
169 /// 功能:
170 /// 读取指定节点的值
171 ///

172 /// 节点名称
173 ///
174 public string GetXmlNodeValue(string strNode)
175 {
176 string strReturn = String.Empty ;
177
178 try
179 {
180 //根据路径获取节点
181 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ;
182 if (!(xmlNode==null))
183 strReturn = xmlNode.InnerText ;
184 }
185 catch(XmlException xmle)
186 {
187 throw xmle ;
188 }
189 return strReturn ;
190 }
191 #endregion
192
193 设置节点值#region 设置节点值
194 /**////
195 /// 功能:
196 /// 设置节点值
197 ///

198 /// 节点的名称
199 /// 节点值
200 public void SetXmlNodeValue(string xmlNodePath,string xmlNodeValue)
201 {
202 try
203 {
204 //可以批量为符合条件的节点进行付值
205 XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
206 if (!(xmlNode==null))
207 {
208 foreach(XmlNode xn in xmlNode)
209 {
210 xn.InnerText = xmlNodeValue ;
211 }
212 }
213 /**//*
214 * 根据指定路径获取节点
215 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ;
216 //设置节点值
217 if (!(xmlNode==null))
218 xmlNode.InnerText = xmlNodeValue ;*/
219 }
220 catch(XmlException xmle)
221 {
222 throw xmle ;
223 }
224 }
225 #endregion
226
227 设置节点的属性值#region 设置节点的属性值
228 /**////
229 /// 功能:
230 /// 设置节点的属性值
231 ///

232 /// 节点名称
233 /// 属性名称
234 /// 属性值
235 public void SetXmlNodeAttributeValue(string xmlNodePath,string xmlNodeAttribute,string xmlNodeAttributeValue)
236 {
237 try
238 {
239 //可以批量为符合条件的节点的属性付值
240 XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
241 if (!(xmlNode==null))
242 {
243 foreach(XmlNode xn in xmlNode)
244 {
245 XmlAttributeCollection xmlAttr = xn.Attributes ;
246 for(int i=0 ; i247 {
248 if ( xmlAttr.Item(i).Name == xmlNodeAttribute )
249 {
250 xmlAttr.Item(i).Value = xmlNodeAttributeValue;
251 break ;
252 }
253 }
254 }
255 }
256 /**//*单个节点
257 //根据指定路径获取节点
258 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ;
259 if (!(xmlNode==null))
260 {//获取节点的属性,并循环取出需要的属性值
261 XmlAttributeCollection xmlAttr = xmlNode.Attributes ;
262 for(int i=0 ; i263 {
264 if ( xmlAttr.Item(i).Name == xmlNodeAttribute )
265 {
266 xmlAttr.Item(i).Value = xmlNodeAttributeValue;
267 break ;
268 }
269 }
270 }
271 */
272 }
273 catch(XmlException xmle)
274 {
275 throw xmle ;
276 }
277 }
278 #endregion
279
280 添加#region 添加
281 /**////
282 /// 获取XML文件的根元素
283 ///

284 public XmlNode GetXmlRoot()
285 {
286 return xmlDoc.DocumentElement ;
287 }
288
289 /**////
290 /// 在根节点下添加父节点
291 ///

292 public void AddParentNode(string parentNode)
293 {
294 try
295 {
296 XmlNode root = GetXmlRoot() ;
297 XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode) ;
298 root.AppendChild(parentXmlNode) ;
299 }
300 catch(XmlException xmle)
301 {
302 throw xmle ;
303 }
304 }
305
306 /**////
307 /// 向一个已经存在的父节点中插入一个子节点
308 ///

309 /// 父节点
310 /// 字节点名称
311 public void AddChildNode( string parentNodePath,string childnodename )
312 {
313 try
314 {
315 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath) ;
316 if(!((parentXmlNode)==null))//如果此节点存在
317 {
318 XmlNode childXmlNode = xmlDoc.CreateElement(childnodename) ;
319 parentXmlNode.AppendChild( childXmlNode ) ;
320 }
321 else{//如果不存在就放父节点添加
322 //this.GetXmlRoot().AppendChild(childXmlNode);
323 }
324
325 }
326 catch(XmlException xmle)
327 {
328 throw xmle;
329 }
330 }
331
332 /**////
333 /// 向一个节点添加属性
334 ///

335 /// 节点路径
336 /// 属性名
337 public void AddAttribute( string NodePath , string NodeAttribute)
338 {
339 privateAddAttribute(NodePath,NodeAttribute,"");
340 }
341 /**////
342 ///
343 ///

344 ///
345 ///
346 ///
347 private void privateAddAttribute( string NodePath , string NodeAttribute,string NodeAttributeValue)
348 {
349 try
350 {
351 XmlNode nodePath = xmlDoc.SelectSingleNode( NodePath ) ;
352 if (!(nodePath==null))
353 {
354 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
355 nodeAttribute.Value=NodeAttributeValue;
356 nodePath.Attributes.Append(nodeAttribute) ;
357 }
358 }
359 catch(XmlException xmle)
360 {
361 throw xmle;
362 }
363 }
364 /**////
365 /// 向一个节点添加属性,并付值
366 ///

367 /// 节点
368 /// 属性名
369 /// 属性值
370 public void AddAttribute( string NodePath , string NodeAttribute,string NodeAttributeValue)
371 {
372 privateAddAttribute(NodePath,NodeAttribute,NodeAttributeValue);
373 }
374 #endregion
375
376 删除#region 删除
377 /**////
378 /// 删除节点的一个属性
379 ///

380 /// 节点所在的xpath表达式
381 /// 属性名
382 public void DeleteAttribute( string NodePath , string NodeAttribute)
383 {
384 XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);
385 if (!(nodePath==null))
386 {
387 foreach (XmlNode tempxn in nodePath)
388 {
389 XmlAttributeCollection xmlAttr = tempxn.Attributes ;
390 for(int i=0 ; i391 {
392 if ( xmlAttr.Item(i).Name == NodeAttribute)
393 {
394 tempxn.Attributes.RemoveAt(i);
395 break ;
396 }
397 }
398 }
399 }
400 }
401
402 /**////
403 /// 删除节点,当其属性值等于给定的值时
404 ///

405 /// 节点所在的xpath表达式
406 /// 属性
407 ///
408 public void DeleteAttribute( string NodePath , string NodeAttribute , string NodeAttributeValue)
409 {
410 XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);
411 if (!(nodePath==null))
412 {
413 foreach (XmlNode tempxn in nodePath)
414 {
415 XmlAttributeCollection xmlAttr = tempxn.Attributes ;
416 for(int i=0 ; i417 {
418 if ( xmlAttr.Item(i).Name == NodeAttribute && xmlAttr.Item(i).Value==NodeAttributeValue)
419 {
420 tempxn.Attributes.RemoveAt(i);
421 break ;
422 }
423 }
424 }
425 }
426 }
427 /**////
428 /// 删除节点
429 ///

430 ///
431 ///
432 public void DeleteXmlNode(string tempXmlNode){
433 XmlNodeList nodePath =this.xmlDoc.SelectNodes(tempXmlNode);
434 if (!(nodePath==null))
435 {
436 foreach(XmlNode xn in nodePath)
437 {
438 xn.ParentNode.RemoveChild(xn);
439 }
440 }
441 }
442
443 #endregion
444
445 XML文档事件#region XML文档事件
446 /**////
447 ///
448 ///

449 ///
450 ///
451 private void nodeInsertEvent(Object src, XmlNodeChangedEventArgs args)
452 {
453 //保存设置
454 SaveXmlDocument();
455 }
456 /**////
457 ///
458 ///

459 ///
460 ///
461 private void nodeDeleteEvent(Object src, XmlNodeChangedEventArgs args)
462 {
463 //保存设置
464 SaveXmlDocument();
465 }
466 /**////
467 ///
468 ///

469 ///
470 ///
471 private void nodeUpdateEvent(Object src, XmlNodeChangedEventArgs args)
472 {
473 //保存设置
474 SaveXmlDocument();
475 }
476 #endregion
477
478 保存XML文件#region 保存XML文件
479 /**////
480 /// 功能:
481 /// 保存XML文件
482 ///
483 ///

484 public void SaveXmlDocument()
485 {
486 try
487 {
488 //保存设置的结果
489 if( this.xmlFilePathType == enumXmlPathType.AbsolutePath )
490 {
491 Savexml( xmlFilePath ) ;
492 }
493 else if( this.xmlFilePathType == enumXmlPathType.VirtualPath )
494 {
495 Savexml(HttpContext.Current.Server.MapPath(xmlFilePath)) ;
496 }
497 }
498 catch(XmlException xmle)
499 {
500 throw xmle;
501 }
502 }
503
504 /**////
505 /// 功能:
506 /// 保存XML文件
507 ///

508 public void SaveXmlDocument(string tempXMLFilePath)
509 {
510 try
511 {
512 //保存设置的结果
513 Savexml(tempXMLFilePath);
514 }
515 catch(XmlException xmle)
516 {
517 throw xmle;
518 }
519 }
520 /**////
521 ///
522 ///

523 ///
524 private void Savexml(string filepath)
525 {
526 xmlDoc.Save(filepath);
527 }
528
529 #endregion
530
531 }
532
533}
534
535






添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.