xml 文件操作类
xml文件操作类,感兴趣的可以看看,其实也是改别人啊,希望原作者别见怪~
1using System;
2using System.Xml;
3using System.Web;
4
5/**//// <summary>
6/// XML核心类:
7/// 必需用XPath表达式来获取相应节点
8/// </summary>
9public class XmlCore
10{
11 变量-----------------------------------------------------------#region 变量-----------------------------------------------------------
12
13
14 private string xmlFilePath;
15 private XmlDocument xmlDoc = new XmlDocument();
16 #endregion
17
18 属性-----------------------------------------------------------#region 属性-----------------------------------------------------------
19 /**//// <summary>
20 /// 文件路径
21 /// </summary>
22 /// <remarks>文件路径</remarks>
23 public string XmlFilePath
24 {
25 get
26 {
27 return this.xmlFilePath;
28 }
29 set
30 {
31 xmlFilePath = value;
32
33 }
34 }
35
36 #endregion
37
38 构造函数-------------------------------------------------------#region 构造函数-------------------------------------------------------
39 /**//// <summary>
40 /// 构造函数
41 /// </summary>
42 /// <param name="tempXmlFilePath">已有的文件的路径</param>
43 public XmlCore(string tempXmlFilePath)
44 {
45 this.xmlFilePath = tempXmlFilePath;
46 GetXmlDocument();
47 }
48
49 /**//// <summary>
50 /// 构造函数
51 /// </summary>
52 /// <param name="NewXmlFilePath">将要新建的文件路径</param>
53 /// <param name="RootNodeName">根节点名称</param>
54 public XmlCore(string NewXmlFilePath, string RootNodeName)
55 {
56 CreateNewXmlFile(NewXmlFilePath, RootNodeName);
57 this.xmlFilePath = NewXmlFilePath;
58 GetXmlDocument();
59 }
60
61 /**////<summary>
62 ///获取XmlDocument实体类
63 ///</summary>
64 /// <returns>指定的XML描述文件的一个xmldocument实例</returns>
65 private XmlDocument GetXmlDocument()
66 {
67 XmlDocument doc = null;
68
69 doc = GetXmlDocumentFromFile(xmlFilePath);
70
71 return doc;
72 }
73
74 private XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath)
75 {
76 string xmlFileFullPath = tempXmlFilePath;
77 xmlDoc.Load(xmlFileFullPath);
78 //定义事件处理
79 xmlDoc.NodeChanged += new XmlNodeChangedEventHandler(this.nodeUpdateEvent);
80 xmlDoc.NodeInserted += new XmlNodeChangedEventHandler(this.nodeInsertEvent);
81 xmlDoc.NodeRemoved += new XmlNodeChangedEventHandler(this.nodeDeleteEvent);
82 return xmlDoc;
83 }
84
85 private void CreateNewXmlFile(string filePath, string rootNode)
86 {
87 XmlTextWriter xtw = new XmlTextWriter(filePath, System.Text.Encoding.UTF8);
88 xtw.Formatting = Formatting.Indented;
89 xtw.WriteStartDocument(false);
90 xtw.WriteStartElement(rootNode);
91 xtw.WriteEndElement();
92 xtw.Flush();
93 xtw.Close();
94 }
95
96 #endregion
97
98 获取所有指定名称的节点#region 获取所有指定名称的节点
99 /**//// <summary>
100 /// 功能:
101 /// 获取所有指定名称的节点(XmlNodeList)
102 /// </summary>
103 /// <param >节点名称</param>
104 public XmlNodeList GetXmlNodeList(string strNode)
105 {
106 XmlNodeList strReturn = null;
107 try
108 {
109 //根据指定路径获取节点
110 XmlNodeList xmlNode = xmlDoc.SelectNodes(strNode);
111 if (!(xmlNode == null))
112 {
113 strReturn = xmlNode;
114 }
115 }
116 catch (XmlException xmle)
117 {
118 throw xmle;
119 }
120 return strReturn;
121 }
122 #endregion
123
124 读取指定节点的指定属性值---------------------------------------#region 读取指定节点的指定属性值---------------------------------------
125 /**//// <summary>
126 /// 功能:
127 /// 读取指定节点的指定属性值(Value)
128 /// </summary>
129 /// <param >节点名称</param>
130 /// <param >此节点的属性</param>
131 /// <returns></returns>
132 public string GetXmlNodeAttributeValue(string strNode, string strAttribute)
133 {
134 string strReturn = "";
135 try
136 {
137 //根据指定路径获取节点
138 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
139 if (!(xmlNode == null))
140 {
141 strReturn = xmlNode.Attributes.GetNamedItem(strAttribute).Value;
142
143 /**/////获取节点的属性,并循环取出需要的属性值
144 //XmlAttributeCollection xmlAttr = xmlNode.Attributes;
145 //for (int i = 0; i < xmlAttr.Count; i++)
146 //{
147 // if (xmlAttr.Item(i).Name == strAttribute)
148 // {
149 // strReturn = xmlAttr.Item(i).Value;
150 // break;
151 // }
152 //}
153 }
154 }
155 catch (XmlException xmle)
156 {
157 throw xmle;
158 }
159 return strReturn;
160 }
161 #endregion
162
163 读取指定节点的值-----------------------------------------------#region 读取指定节点的值-----------------------------------------------
164 /**//// <summary>
165 /// 功能:
166 /// 读取指定节点的值(InnerText)
167 /// </summary>
168 /// <param >节点名称</param>
169 /// <returns></returns>
170 public string GetXmlNodeValue(string strNode)
171 {
172 string strReturn = String.Empty;
173 try
174 {
175 //根据路径获取节点
176 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
177 if (!(xmlNode == null))
178 strReturn = xmlNode.InnerText;
179 }
180 catch (XmlException xmle)
181 {
182 throw xmle;
183 }
184 return strReturn;
185 }
186 #endregion
187
188 设置节点值-----------------------------------------------------#region 设置节点值-----------------------------------------------------
189 /**//// <summary>
190 /// 功能:
191 /// 设置节点值(InnerText)
192 /// </summary>
193 /// <param >节点的名称</param>
194 /// <param >节点值</param>
195 public void SetXmlNodeValue(string xmlNodePath, string xmlNodeValue)
196 {
197 try
198 {
199 //可以批量为符合条件的节点进行付值
200 XmlNodeList xmlNode = this.xmlDoc.SelectNodes(xmlNodePath);
201 if (!(xmlNode == null))
202 {
203 foreach (XmlNode xn in xmlNode)
204 {
205 xn.InnerText = xmlNodeValue;
206 }
207 }
208 /**//**/
209 /**//*
210 * 根据指定路径获取节点
211 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ;
212 //设置节点值
213 if (!(xmlNode==null))
214 xmlNode.InnerText = xmlNodeValue ;*/
215 }
216 catch (XmlException xmle)
217 {
218 throw xmle;
219 }
220 }
221 #endregion
222
223 设置节点的属性值-----------------------------------------------#region 设置节点的属性值-----------------------------------------------
224 /**//// <summary>
225 /// 功能:
226 /// 设置节点的属性值
227 /// </summary>
228 /// <param >节点名称</param>
229 /// <param >属性名称</param>
230 /// <param >属性值</param>
231 public void SetXmlNodeAttributeValue(string xmlNodePath, string xmlNodeAttribute, string xmlNodeAttributeValue)
232 {
233 try
234 {
235 //可以批量为符合条件的节点的属性付值
236 XmlNodeList xmlNode = this.xmlDoc.SelectNodes(xmlNodePath);
237 if (!(xmlNode == null))
238 {
239 foreach (XmlNode xn in xmlNode)
240 {
241 XmlAttributeCollection xmlAttr = xn.Attributes;
242 for (int i = 0; i < xmlAttr.Count; i++)
243 {
244 if (xmlAttr.Item(i).Name == xmlNodeAttribute)
245 {
246 xmlAttr.Item(i).Value = xmlNodeAttributeValue;
247 break;
248 }
249 }
250 }
251 }
252 }
253 catch (XmlException xmle)
254 {
255 throw xmle;
256 }
257 }
258 #endregion
259
260 添加-----------------------------------------------------------#region 添加-----------------------------------------------------------
261 /**//// <summary>
262 /// 获取XML文件的根元素
263 /// </summary>
264 public XmlNode GetXmlRoot()
265 {
266 return xmlDoc.DocumentElement;
267 }
268
269 /**//// <summary>
270 /// 在根节点下添加父节点
271 /// </summary>
272 public void AddParentNode(string parentNode)
273 {
274 try
275 {
276 XmlNode root = GetXmlRoot();
277 XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode);
278 root.AppendChild(parentXmlNode);
279 }
280 catch (XmlException xmle)
281 {
282 throw xmle;
283 }
284 }
285
286 /**//// <summary>
287 /// 向一个已经存在的父节点中插入一个子节点,并返回子节点.
288 /// </summary>
289 /// <param >父节点</param>
290 /// <param >字节点名称</param>
291 public XmlNode AddChildNode(string parentNodePath, string childnodename)
292 {
293 XmlNode childXmlNode = null;
294 try
295 {
296 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
297 if (!((parentXmlNode) == null))//如果此节点存在
298 {
299 childXmlNode = xmlDoc.CreateElement(childnodename);
300 parentXmlNode.AppendChild(childXmlNode);
301 }
302 else
303 {//如果不存在就放父节点添加
304 this.GetXmlRoot().AppendChild(childXmlNode);
305 }
306 }
307 catch (XmlException xmle)
308 {
309 throw xmle;
310 }
311 return childXmlNode;
312 }
313 /**//// <summary>
314 /// 向一个已经存在的父节点中插入一个子节点,并添加一个属性
315 /// </summary>
316 public void AddChildNode(string parentNodePath, string childnodename, string NodeAttribute, string NodeAttributeValue)
317 {
318 try
319 {
320 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
321 XmlNode childXmlNode = null;
322 if (!((parentXmlNode) == null))//如果此节点存在
323 {
324 childXmlNode = xmlDoc.CreateElement(childnodename);
325
326 //添加属性
327 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
328 nodeAttribute.Value = NodeAttributeValue;
329 childXmlNode.Attributes.Append(nodeAttribute);
330
331 parentXmlNode.AppendChild(childXmlNode);
332 }
333 else
334 {//如果不存在就放父节点添加
335 this.GetXmlRoot().AppendChild(childXmlNode);
336 }
337 }
338 catch (XmlException xmle)
339 {
340 throw xmle;
341 }
342 }
343
344 /**//// <summary>
345 /// 向一个节点添加属性,值为空
346 /// </summary>
347 /// <param >节点路径</param>
348 /// <param >属性名</param>
349 public void AddAttribute(string NodePath, string NodeAttribute)
350 {
351 privateAddAttribute(NodePath, NodeAttribute, "");
352 }
353 /**//// <summary>
354 /// 向一个节点添加属性,并赋值***
355 /// </summary>
356 public void AddAttribute(XmlNode childXmlNode, string NodeAttribute, string NodeAttributeValue)
357 {
358 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
359 nodeAttribute.Value = NodeAttributeValue;
360 childXmlNode.Attributes.Append(nodeAttribute);
361 }
362
363 /**//// <summary>
364 /// 向一个节点添加属性
365 /// </summary>
366 /// <param >节点路径</param>
367 /// <param >属性名</param>
368 /// <param >属性值</param>
369 private void privateAddAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)
370 {
371 try
372 {
373 XmlNode nodePath = xmlDoc.SelectSingleNode(NodePath);
374 if (!(nodePath == null))
375 {
376 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
377 nodeAttribute.Value = NodeAttributeValue;
378 nodePath.Attributes.Append(nodeAttribute);
379 }
380 }
381 catch (XmlException xmle)
382 {
383 throw xmle;
384 }
385 }
386 /**//// <summary>
387 /// 向一个节点添加属性,并赋值
388 /// </summary>
389 /// <param >节点</param>
390 /// <param >属性名</param>
391 /// <param >属性值</param>
392 public void AddAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)
393 {
394 privateAddAttribute(NodePath, NodeAttribute, NodeAttributeValue);
395 }
396 #endregion
397
398 删除-----------------------------------------------------------#region 删除-----------------------------------------------------------
399 /**//// <summary>
400 /// 删除节点的一个属性
401 /// </summary>
402 /// <param >节点所在的xpath表达式</param>
403 /// <param >属性名</param>
404 public void DeleteAttribute(string NodePath, string NodeAttribute)
405 {
406 XmlNodeList nodePath = this.xmlDoc.SelectNodes(NodePath);
407 if (!(nodePath == null))
408 {
409 foreach (XmlNode tempxn in nodePath)
410 {
411 XmlAttributeCollection xmlAttr = tempxn.Attributes;
412 for (int i = 0; i < xmlAttr.Count; i++)
413 {
414 if (xmlAttr.Item(i).Name == NodeAttribute)
415 {
416 tempxn.Attributes.RemoveAt(i);
417 break;
418 }
419 }
420 }
421 }
422 }
423
424 /**//// <summary>
425 /// 删除节点的一个属性,当其属性值等于给定的值时
426 /// </summary>
427 /// <param >节点所在的xpath表达式</param>
428 /// <param >属性</param>
429 /// <param >值</param>
430 public void DeleteAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)
431 {
432 XmlNodeList nodePath = this.xmlDoc.SelectNodes(NodePath);
433 if (!(nodePath == null))
434 {
435 foreach (XmlNode tempxn in nodePath)
436 {
437 XmlAttributeCollection xmlAttr = tempxn.Attributes;
438 for (int i = 0; i < xmlAttr.Count; i++)
439 {
440 if (xmlAttr.Item(i).Name == NodeAttribute && xmlAttr.Item(i).Value == NodeAttributeValue)
441 {
442 tempxn.Attributes.RemoveAt(i);
443 break;
444 }
445 }
446 }
447 }
448 }
449 /**//// <summary>
450 /// 删除节点
451 /// </summary>
452 /// <param ></param>
453 /// <remarks></remarks>
454 public void DeleteXmlNode(string tempXmlNode)
455 {
456 XmlNodeList nodePath = this.xmlDoc.SelectNodes(tempXmlNode);
457 if (!(nodePath == null))
458 {
459 foreach (XmlNode xn in nodePath)
460 {
461 xn.ParentNode.RemoveChild(xn);
462 }
463 }
464 }
465
466 #endregion
467
468 XML文档事件----------------------------------------------------#region XML文档事件----------------------------------------------------
469 /**//// <summary>
470 /// 节点插入事件
471 /// </summary>
472 /// <param ></param>
473 /// <param ></param>
474 private void nodeInsertEvent(Object src, XmlNodeChangedEventArgs args)
475 {
476 //保存设置
477 SaveXmlDocument();
478 }
479 /**//// <summary>
480 /// 节点删除事件
481 /// </summary>
482 /// <param ></param>
483 /// <param ></param>
484 private void nodeDeleteEvent(Object src, XmlNodeChangedEventArgs args)
485 {
486 //保存设置
487 SaveXmlDocument();
488 }
489 /**//// <summary>
490 /// 节点更新事件
491 /// </summary>
492 /// <param ></param>
493 /// <param ></param>
494 private void nodeUpdateEvent(Object src, XmlNodeChangedEventArgs args)
495 {
496 //保存设置
497 SaveXmlDocument();
498 }
499 #endregion
500
501 保存XML文件----------------------------------------------------#region 保存XML文件----------------------------------------------------
502 /**//// <summary>
503 /// 功能:
504 /// 保存XML文件
505 /// </summary>
506 public void SaveXmlDocument()
507 {
508 try
509 {
510 //保存设置的结果
511 Savexml(xmlFilePath);
512
513 }
514 catch (XmlException xmle)
515 {
516 throw xmle;
517 }
518 }
519
520 /**//// <summary>
521 /// 功能:
522 /// 保存XML文件
523 /// </summary>
524 public void SaveXmlDocument(string tempXMLFilePath)
525 {
526 try
527 {
528 //保存设置的结果
529 Savexml(tempXMLFilePath);
530 }
531 catch (XmlException xmle)
532 {
533 throw xmle;
534 }
535 }
536 /**//// <summary>
537 ///
538 /// </summary>
539 /// <param ></param>
540 private void Savexml(string filepath)
541 {
542 xmlDoc.Save(filepath);
543 }
544
545 #endregion
546
547}
548
549
2using System.Xml;
3using System.Web;
4
5/**//// <summary>
6/// XML核心类:
7/// 必需用XPath表达式来获取相应节点
8/// </summary>
9public class XmlCore
10{
11 变量-----------------------------------------------------------#region 变量-----------------------------------------------------------
12
13
14 private string xmlFilePath;
15 private XmlDocument xmlDoc = new XmlDocument();
16 #endregion
17
18 属性-----------------------------------------------------------#region 属性-----------------------------------------------------------
19 /**//// <summary>
20 /// 文件路径
21 /// </summary>
22 /// <remarks>文件路径</remarks>
23 public string XmlFilePath
24 {
25 get
26 {
27 return this.xmlFilePath;
28 }
29 set
30 {
31 xmlFilePath = value;
32
33 }
34 }
35
36 #endregion
37
38 构造函数-------------------------------------------------------#region 构造函数-------------------------------------------------------
39 /**//// <summary>
40 /// 构造函数
41 /// </summary>
42 /// <param name="tempXmlFilePath">已有的文件的路径</param>
43 public XmlCore(string tempXmlFilePath)
44 {
45 this.xmlFilePath = tempXmlFilePath;
46 GetXmlDocument();
47 }
48
49 /**//// <summary>
50 /// 构造函数
51 /// </summary>
52 /// <param name="NewXmlFilePath">将要新建的文件路径</param>
53 /// <param name="RootNodeName">根节点名称</param>
54 public XmlCore(string NewXmlFilePath, string RootNodeName)
55 {
56 CreateNewXmlFile(NewXmlFilePath, RootNodeName);
57 this.xmlFilePath = NewXmlFilePath;
58 GetXmlDocument();
59 }
60
61 /**////<summary>
62 ///获取XmlDocument实体类
63 ///</summary>
64 /// <returns>指定的XML描述文件的一个xmldocument实例</returns>
65 private XmlDocument GetXmlDocument()
66 {
67 XmlDocument doc = null;
68
69 doc = GetXmlDocumentFromFile(xmlFilePath);
70
71 return doc;
72 }
73
74 private XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath)
75 {
76 string xmlFileFullPath = tempXmlFilePath;
77 xmlDoc.Load(xmlFileFullPath);
78 //定义事件处理
79 xmlDoc.NodeChanged += new XmlNodeChangedEventHandler(this.nodeUpdateEvent);
80 xmlDoc.NodeInserted += new XmlNodeChangedEventHandler(this.nodeInsertEvent);
81 xmlDoc.NodeRemoved += new XmlNodeChangedEventHandler(this.nodeDeleteEvent);
82 return xmlDoc;
83 }
84
85 private void CreateNewXmlFile(string filePath, string rootNode)
86 {
87 XmlTextWriter xtw = new XmlTextWriter(filePath, System.Text.Encoding.UTF8);
88 xtw.Formatting = Formatting.Indented;
89 xtw.WriteStartDocument(false);
90 xtw.WriteStartElement(rootNode);
91 xtw.WriteEndElement();
92 xtw.Flush();
93 xtw.Close();
94 }
95
96 #endregion
97
98 获取所有指定名称的节点#region 获取所有指定名称的节点
99 /**//// <summary>
100 /// 功能:
101 /// 获取所有指定名称的节点(XmlNodeList)
102 /// </summary>
103 /// <param >节点名称</param>
104 public XmlNodeList GetXmlNodeList(string strNode)
105 {
106 XmlNodeList strReturn = null;
107 try
108 {
109 //根据指定路径获取节点
110 XmlNodeList xmlNode = xmlDoc.SelectNodes(strNode);
111 if (!(xmlNode == null))
112 {
113 strReturn = xmlNode;
114 }
115 }
116 catch (XmlException xmle)
117 {
118 throw xmle;
119 }
120 return strReturn;
121 }
122 #endregion
123
124 读取指定节点的指定属性值---------------------------------------#region 读取指定节点的指定属性值---------------------------------------
125 /**//// <summary>
126 /// 功能:
127 /// 读取指定节点的指定属性值(Value)
128 /// </summary>
129 /// <param >节点名称</param>
130 /// <param >此节点的属性</param>
131 /// <returns></returns>
132 public string GetXmlNodeAttributeValue(string strNode, string strAttribute)
133 {
134 string strReturn = "";
135 try
136 {
137 //根据指定路径获取节点
138 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
139 if (!(xmlNode == null))
140 {
141 strReturn = xmlNode.Attributes.GetNamedItem(strAttribute).Value;
142
143 /**/////获取节点的属性,并循环取出需要的属性值
144 //XmlAttributeCollection xmlAttr = xmlNode.Attributes;
145 //for (int i = 0; i < xmlAttr.Count; i++)
146 //{
147 // if (xmlAttr.Item(i).Name == strAttribute)
148 // {
149 // strReturn = xmlAttr.Item(i).Value;
150 // break;
151 // }
152 //}
153 }
154 }
155 catch (XmlException xmle)
156 {
157 throw xmle;
158 }
159 return strReturn;
160 }
161 #endregion
162
163 读取指定节点的值-----------------------------------------------#region 读取指定节点的值-----------------------------------------------
164 /**//// <summary>
165 /// 功能:
166 /// 读取指定节点的值(InnerText)
167 /// </summary>
168 /// <param >节点名称</param>
169 /// <returns></returns>
170 public string GetXmlNodeValue(string strNode)
171 {
172 string strReturn = String.Empty;
173 try
174 {
175 //根据路径获取节点
176 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
177 if (!(xmlNode == null))
178 strReturn = xmlNode.InnerText;
179 }
180 catch (XmlException xmle)
181 {
182 throw xmle;
183 }
184 return strReturn;
185 }
186 #endregion
187
188 设置节点值-----------------------------------------------------#region 设置节点值-----------------------------------------------------
189 /**//// <summary>
190 /// 功能:
191 /// 设置节点值(InnerText)
192 /// </summary>
193 /// <param >节点的名称</param>
194 /// <param >节点值</param>
195 public void SetXmlNodeValue(string xmlNodePath, string xmlNodeValue)
196 {
197 try
198 {
199 //可以批量为符合条件的节点进行付值
200 XmlNodeList xmlNode = this.xmlDoc.SelectNodes(xmlNodePath);
201 if (!(xmlNode == null))
202 {
203 foreach (XmlNode xn in xmlNode)
204 {
205 xn.InnerText = xmlNodeValue;
206 }
207 }
208 /**//**/
209 /**//*
210 * 根据指定路径获取节点
211 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ;
212 //设置节点值
213 if (!(xmlNode==null))
214 xmlNode.InnerText = xmlNodeValue ;*/
215 }
216 catch (XmlException xmle)
217 {
218 throw xmle;
219 }
220 }
221 #endregion
222
223 设置节点的属性值-----------------------------------------------#region 设置节点的属性值-----------------------------------------------
224 /**//// <summary>
225 /// 功能:
226 /// 设置节点的属性值
227 /// </summary>
228 /// <param >节点名称</param>
229 /// <param >属性名称</param>
230 /// <param >属性值</param>
231 public void SetXmlNodeAttributeValue(string xmlNodePath, string xmlNodeAttribute, string xmlNodeAttributeValue)
232 {
233 try
234 {
235 //可以批量为符合条件的节点的属性付值
236 XmlNodeList xmlNode = this.xmlDoc.SelectNodes(xmlNodePath);
237 if (!(xmlNode == null))
238 {
239 foreach (XmlNode xn in xmlNode)
240 {
241 XmlAttributeCollection xmlAttr = xn.Attributes;
242 for (int i = 0; i < xmlAttr.Count; i++)
243 {
244 if (xmlAttr.Item(i).Name == xmlNodeAttribute)
245 {
246 xmlAttr.Item(i).Value = xmlNodeAttributeValue;
247 break;
248 }
249 }
250 }
251 }
252 }
253 catch (XmlException xmle)
254 {
255 throw xmle;
256 }
257 }
258 #endregion
259
260 添加-----------------------------------------------------------#region 添加-----------------------------------------------------------
261 /**//// <summary>
262 /// 获取XML文件的根元素
263 /// </summary>
264 public XmlNode GetXmlRoot()
265 {
266 return xmlDoc.DocumentElement;
267 }
268
269 /**//// <summary>
270 /// 在根节点下添加父节点
271 /// </summary>
272 public void AddParentNode(string parentNode)
273 {
274 try
275 {
276 XmlNode root = GetXmlRoot();
277 XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode);
278 root.AppendChild(parentXmlNode);
279 }
280 catch (XmlException xmle)
281 {
282 throw xmle;
283 }
284 }
285
286 /**//// <summary>
287 /// 向一个已经存在的父节点中插入一个子节点,并返回子节点.
288 /// </summary>
289 /// <param >父节点</param>
290 /// <param >字节点名称</param>
291 public XmlNode AddChildNode(string parentNodePath, string childnodename)
292 {
293 XmlNode childXmlNode = null;
294 try
295 {
296 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
297 if (!((parentXmlNode) == null))//如果此节点存在
298 {
299 childXmlNode = xmlDoc.CreateElement(childnodename);
300 parentXmlNode.AppendChild(childXmlNode);
301 }
302 else
303 {//如果不存在就放父节点添加
304 this.GetXmlRoot().AppendChild(childXmlNode);
305 }
306 }
307 catch (XmlException xmle)
308 {
309 throw xmle;
310 }
311 return childXmlNode;
312 }
313 /**//// <summary>
314 /// 向一个已经存在的父节点中插入一个子节点,并添加一个属性
315 /// </summary>
316 public void AddChildNode(string parentNodePath, string childnodename, string NodeAttribute, string NodeAttributeValue)
317 {
318 try
319 {
320 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
321 XmlNode childXmlNode = null;
322 if (!((parentXmlNode) == null))//如果此节点存在
323 {
324 childXmlNode = xmlDoc.CreateElement(childnodename);
325
326 //添加属性
327 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
328 nodeAttribute.Value = NodeAttributeValue;
329 childXmlNode.Attributes.Append(nodeAttribute);
330
331 parentXmlNode.AppendChild(childXmlNode);
332 }
333 else
334 {//如果不存在就放父节点添加
335 this.GetXmlRoot().AppendChild(childXmlNode);
336 }
337 }
338 catch (XmlException xmle)
339 {
340 throw xmle;
341 }
342 }
343
344 /**//// <summary>
345 /// 向一个节点添加属性,值为空
346 /// </summary>
347 /// <param >节点路径</param>
348 /// <param >属性名</param>
349 public void AddAttribute(string NodePath, string NodeAttribute)
350 {
351 privateAddAttribute(NodePath, NodeAttribute, "");
352 }
353 /**//// <summary>
354 /// 向一个节点添加属性,并赋值***
355 /// </summary>
356 public void AddAttribute(XmlNode childXmlNode, string NodeAttribute, string NodeAttributeValue)
357 {
358 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
359 nodeAttribute.Value = NodeAttributeValue;
360 childXmlNode.Attributes.Append(nodeAttribute);
361 }
362
363 /**//// <summary>
364 /// 向一个节点添加属性
365 /// </summary>
366 /// <param >节点路径</param>
367 /// <param >属性名</param>
368 /// <param >属性值</param>
369 private void privateAddAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)
370 {
371 try
372 {
373 XmlNode nodePath = xmlDoc.SelectSingleNode(NodePath);
374 if (!(nodePath == null))
375 {
376 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
377 nodeAttribute.Value = NodeAttributeValue;
378 nodePath.Attributes.Append(nodeAttribute);
379 }
380 }
381 catch (XmlException xmle)
382 {
383 throw xmle;
384 }
385 }
386 /**//// <summary>
387 /// 向一个节点添加属性,并赋值
388 /// </summary>
389 /// <param >节点</param>
390 /// <param >属性名</param>
391 /// <param >属性值</param>
392 public void AddAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)
393 {
394 privateAddAttribute(NodePath, NodeAttribute, NodeAttributeValue);
395 }
396 #endregion
397
398 删除-----------------------------------------------------------#region 删除-----------------------------------------------------------
399 /**//// <summary>
400 /// 删除节点的一个属性
401 /// </summary>
402 /// <param >节点所在的xpath表达式</param>
403 /// <param >属性名</param>
404 public void DeleteAttribute(string NodePath, string NodeAttribute)
405 {
406 XmlNodeList nodePath = this.xmlDoc.SelectNodes(NodePath);
407 if (!(nodePath == null))
408 {
409 foreach (XmlNode tempxn in nodePath)
410 {
411 XmlAttributeCollection xmlAttr = tempxn.Attributes;
412 for (int i = 0; i < xmlAttr.Count; i++)
413 {
414 if (xmlAttr.Item(i).Name == NodeAttribute)
415 {
416 tempxn.Attributes.RemoveAt(i);
417 break;
418 }
419 }
420 }
421 }
422 }
423
424 /**//// <summary>
425 /// 删除节点的一个属性,当其属性值等于给定的值时
426 /// </summary>
427 /// <param >节点所在的xpath表达式</param>
428 /// <param >属性</param>
429 /// <param >值</param>
430 public void DeleteAttribute(string NodePath, string NodeAttribute, string NodeAttributeValue)
431 {
432 XmlNodeList nodePath = this.xmlDoc.SelectNodes(NodePath);
433 if (!(nodePath == null))
434 {
435 foreach (XmlNode tempxn in nodePath)
436 {
437 XmlAttributeCollection xmlAttr = tempxn.Attributes;
438 for (int i = 0; i < xmlAttr.Count; i++)
439 {
440 if (xmlAttr.Item(i).Name == NodeAttribute && xmlAttr.Item(i).Value == NodeAttributeValue)
441 {
442 tempxn.Attributes.RemoveAt(i);
443 break;
444 }
445 }
446 }
447 }
448 }
449 /**//// <summary>
450 /// 删除节点
451 /// </summary>
452 /// <param ></param>
453 /// <remarks></remarks>
454 public void DeleteXmlNode(string tempXmlNode)
455 {
456 XmlNodeList nodePath = this.xmlDoc.SelectNodes(tempXmlNode);
457 if (!(nodePath == null))
458 {
459 foreach (XmlNode xn in nodePath)
460 {
461 xn.ParentNode.RemoveChild(xn);
462 }
463 }
464 }
465
466 #endregion
467
468 XML文档事件----------------------------------------------------#region XML文档事件----------------------------------------------------
469 /**//// <summary>
470 /// 节点插入事件
471 /// </summary>
472 /// <param ></param>
473 /// <param ></param>
474 private void nodeInsertEvent(Object src, XmlNodeChangedEventArgs args)
475 {
476 //保存设置
477 SaveXmlDocument();
478 }
479 /**//// <summary>
480 /// 节点删除事件
481 /// </summary>
482 /// <param ></param>
483 /// <param ></param>
484 private void nodeDeleteEvent(Object src, XmlNodeChangedEventArgs args)
485 {
486 //保存设置
487 SaveXmlDocument();
488 }
489 /**//// <summary>
490 /// 节点更新事件
491 /// </summary>
492 /// <param ></param>
493 /// <param ></param>
494 private void nodeUpdateEvent(Object src, XmlNodeChangedEventArgs args)
495 {
496 //保存设置
497 SaveXmlDocument();
498 }
499 #endregion
500
501 保存XML文件----------------------------------------------------#region 保存XML文件----------------------------------------------------
502 /**//// <summary>
503 /// 功能:
504 /// 保存XML文件
505 /// </summary>
506 public void SaveXmlDocument()
507 {
508 try
509 {
510 //保存设置的结果
511 Savexml(xmlFilePath);
512
513 }
514 catch (XmlException xmle)
515 {
516 throw xmle;
517 }
518 }
519
520 /**//// <summary>
521 /// 功能:
522 /// 保存XML文件
523 /// </summary>
524 public void SaveXmlDocument(string tempXMLFilePath)
525 {
526 try
527 {
528 //保存设置的结果
529 Savexml(tempXMLFilePath);
530 }
531 catch (XmlException xmle)
532 {
533 throw xmle;
534 }
535 }
536 /**//// <summary>
537 ///
538 /// </summary>
539 /// <param ></param>
540 private void Savexml(string filepath)
541 {
542 xmlDoc.Save(filepath);
543 }
544
545 #endregion
546
547}
548
549