1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Xml;
5 using System.Collections;
6
7 namespace Comm
8 {
9 public class XMLHelper
10 {
11 #region private AppendChild
12 private static void AppendChild(XmlDocument xDoc, XmlNode parentNode, params XmlParameter[] paras)
13 {
14 foreach (XmlParameter xpar in paras)
15 {
16 XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xpar.Name, null);
17 string ns = xpar.NamespaceOfPrefix == null ? "" : newNode.GetNamespaceOfPrefix(xpar.NamespaceOfPrefix);
18 foreach (AttributeParameter attp in xpar.Attributes)
19 {
20 XmlNode attr = xDoc.CreateNode(XmlNodeType.Attribute, attp.Name, ns == "" ? null : ns);
21 attr.Value = attp.Value;
22 newNode.Attributes.SetNamedItem(attr);
23 }
24 newNode.InnerText = xpar.InnerText;
25 parentNode.AppendChild(newNode);
26 }
27 }
28 #endregion
29
30 #region private AddEveryNode
31 private static void AddEveryNode(XmlDocument xDoc, XmlNode parentNode, params XmlParameter[] paras)
32 {
33 XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
34 foreach (XmlNode xns in nlst)
35 {
36 if (xns.Name == parentNode.Name)
37 {
38 AppendChild(xDoc, xns, paras);
39 }
40 else
41 {
42 foreach (XmlNode xn in xns)
43 {
44 if (xn.Name == parentNode.Name)
45 {
46 AppendChild(xDoc, xn, paras);
47 }
48 }
49 }
50 }
51 }
52 #endregion
53
54 #region xmlDoc
55 /// <summary>
56 /// 创建一个XmlDocument对象
57 /// </summary>
58 /// <param name="PathOrString">文件名称或XML字符串</param>
59 public static XmlDocument xmlDoc(string PathOrString)
60 {
61 try
62 {
63 XmlDocument xDoc = new XmlDocument();
64 if (System.IO.File.Exists(PathOrString))
65 {
66 xDoc.Load(PathOrString);
67 }
68 else
69 {
70 xDoc.LoadXml(PathOrString);
71 }
72 return xDoc;
73 }
74 catch
75 {
76 return null;
77 }
78 }
79 #endregion
80
81 #region CreateXMLFile
82 /// <summary>
83 /// 创建一个XML文档
84 /// </summary>
85 /// <param name="fileFullName">文件名称,包括完整路径</param>
86 /// <param name="rootName">根结点名称</param>
87 /// <param name="elemName">元素节点名称</param>
88 /// <param name="paras">XML参数</param>
89 public static void CreateXMLFile(string fileFullName, string rootName, string elemName, params XmlParameter[] paras)
90 {
91 XmlDocument xDoc = new XmlDocument();
92 XmlNode xn;
93 xn = xDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
94 xDoc.AppendChild(xn);
95 XmlNode root = xDoc.CreateElement(rootName);
96 xDoc.AppendChild(root);
97 XmlNode ln = xDoc.CreateNode(XmlNodeType.Element, elemName, null);
98 AppendChild(xDoc, ln, paras);
99 root.AppendChild(ln);
100 try
101 {
102 xDoc.Save(fileFullName);
103 }
104 catch
105 {
106 throw;
107 }
108 }
109 /// <summary>
110 /// 创建一个XML文档
111 /// </summary>
112 /// <param name="fileFullName">文件名称,包括完整路径</param>
113 /// <param name="rootName">根结点名称</param>
114 /// <param name="elemp">元素节点对象</param>
115 /// <param name="paras">XML参数</param>
116 public static void CreateXMLFile(string fileFullName, string rootName, XmlParameter elemp, params XmlParameter[] paras)
117 {
118 XmlDocument xDoc = new XmlDocument();
119 XmlNode xn;
120 xn = xDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
121 xDoc.AppendChild(xn);
122 XmlNode root = xDoc.CreateElement(rootName);
123 xDoc.AppendChild(root);
124 XmlNode ln = xDoc.CreateNode(XmlNodeType.Element, elemp.Name, null);
125 string ns = elemp.NamespaceOfPrefix == null ? "" : ln.GetNamespaceOfPrefix(elemp.NamespaceOfPrefix);
126 foreach (AttributeParameter ap in elemp.Attributes)
127 {
128 XmlNode elemAtt = xDoc.CreateNode(XmlNodeType.Attribute, ap.Name, ns == "" ? null : ns);
129 elemAtt.Value = ap.Value;
130 ln.Attributes.SetNamedItem(elemAtt);
131 }
132 AppendChild(xDoc, ln, paras);
133 root.AppendChild(ln);
134 try
135 {
136 xDoc.Save(fileFullName);
137 }
138 catch
139 {
140 throw;
141 }
142 }
143 /// <summary>
144 /// 创建一个XML文档
145 /// </summary>
146 /// <param name="fileFullName">文件名称,包括完整路径</param>
147 /// <param name="rootp">根结点对象</param>
148 /// <param name="elemName">元素节点名称</param>
149 /// <param name="paras">XML参数</param>
150 public static void CreateXMLFile(string fileFullName, XmlParameter rootp, string elemName, params XmlParameter[] paras)
151 {
152 XmlDocument xDoc = new XmlDocument();
153 XmlNode xn;
154 xn = xDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
155 xDoc.AppendChild(xn);
156 XmlNode root = xDoc.CreateElement(rootp.Name);
157 string ns = rootp.NamespaceOfPrefix == null ? "" : root.GetNamespaceOfPrefix(rootp.NamespaceOfPrefix);
158 foreach (AttributeParameter ap in rootp.Attributes)
159 {
160 XmlNode rootAtt = xDoc.CreateNode(XmlNodeType.Attribute, ap.Name, ns == "" ? null : ns);
161 rootAtt.Value = ap.Value;
162 root.Attributes.SetNamedItem(rootAtt);
163 }
164 xDoc.AppendChild(root);
165 XmlNode ln = xDoc.CreateNode(XmlNodeType.Element, elemName, null);
166 AppendChild(xDoc, ln, paras);
167 root.AppendChild(ln);
168 try
169 {
170 xDoc.Save(fileFullName);
171 }
172 catch
173 {
174 throw;
175 }
176 }
177 /// <summary>
178 /// 创建一个XML文档
179 /// </summary>
180 /// <param name="fileFullName">文件名称,包括完整路径</param>
181 /// <param name="rootp">根结点对象</param>
182 /// <param name="elemp">元素节点对象</param>
183 /// <param name="paras">XML参数</param>
184 public static void CreateXMLFile(string fileFullName, XmlParameter rootp, XmlParameter elemp, params XmlParameter[] paras)
185 {
186 XmlDocument xDoc = new XmlDocument();
187 XmlNode xn;
188 xn = xDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
189 xDoc.AppendChild(xn);
190 XmlNode root = xDoc.CreateElement(rootp.Name);
191 string ns = rootp.NamespaceOfPrefix == null ? "" : root.GetNamespaceOfPrefix(rootp.NamespaceOfPrefix);
192 foreach (AttributeParameter ap in rootp.Attributes)
193 {
194 XmlNode rootAtt = xDoc.CreateNode(XmlNodeType.Attribute, ap.Name, ns == "" ? null : ns);
195 rootAtt.Value = ap.Value;
196 root.Attributes.SetNamedItem(rootAtt);
197 }
198 xDoc.AppendChild(root);
199 XmlNode ln = xDoc.CreateNode(XmlNodeType.Element, elemp.Name, null);
200 ns = elemp.NamespaceOfPrefix == null ? "" : ln.GetNamespaceOfPrefix(elemp.NamespaceOfPrefix);
201 foreach (AttributeParameter ap in elemp.Attributes)
202 {
203 XmlNode elemAtt = xDoc.CreateNode(XmlNodeType.Attribute, ap.Name, ns == "" ? null : ns);
204 elemAtt.Value = ap.Value;
205 ln.Attributes.SetNamedItem(elemAtt);
206 }
207 AppendChild(xDoc, ln, paras);
208 root.AppendChild(ln);
209 try
210 {
211 xDoc.Save(fileFullName);
212 }
213 catch
214 {
215 throw;
216 }
217 }
218 #endregion
219
220 #region AddNewNode
221 /// <summary>
222 /// 添加新节点
223 /// </summary>
224 /// <param name="fileFullName">文件名称,包括完整路径</param>
225 /// <param name="parentNode">新节点的父节点对象</param>
226 /// <param name="paras">XML参数对象</param>
227 public static bool AddNewNode(string fileFullName, XmlNode parentNode, params XmlParameter[] paras)
228 {
229 XmlDocument xDoc = xmlDoc(fileFullName);
230 if (parentNode.Name == xDoc.DocumentElement.Name)
231 {
232 XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.ChildNodes[0].Name, null);
233 AppendChild(xDoc, newNode, paras);
234 xDoc.DocumentElement.AppendChild(newNode);
235 }
236 else
237 {
238 AddEveryNode(xDoc, parentNode, paras);
239 }
240 xDoc.Save(fileFullName);
241 return true;
242 }
243 /// <summary>
244 /// 添加新节点
245 /// </summary>
246 /// <param name="xDoc">XmlDocument对象</param>
247 /// <param name="parentNode">新节点的父节点对象</param>
248 /// <param name="paras">XML参数对象</param>
249 public static bool AddNewNode(XmlDocument xDoc, XmlNode parentNode, params XmlParameter[] paras)
250 {
251 if (parentNode.Name == xDoc.DocumentElement.Name)
252 {
253 XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.ChildNodes[0].Name, null);
254 AppendChild(xDoc, newNode, paras);
255 xDoc.DocumentElement.AppendChild(newNode);
256 }
257 else
258 {
259 AddEveryNode(xDoc, parentNode, paras);
260 }
261 return true;
262 }
263 /// <summary>
264 /// 添加新节点
265 /// </summary>
266 /// <param name="xDoc">XmlDocument对象</param>
267 /// <param name="parentName">新节点的父节点名称</param>
268 /// <param name="paras">XML参数对象</param>
269 public static bool AddNewNode(XmlDocument xDoc, string parentName, params XmlParameter[] paras)
270 {
271 XmlNode parentNode = GetNode(xDoc, parentName);
272 if (parentNode == null) return false;
273 if (parentNode.Name == xDoc.DocumentElement.Name)
274 {
275 XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.ChildNodes[0].Name, null);
276 AppendChild(xDoc, newNode, paras);
277 xDoc.DocumentElement.AppendChild(newNode);
278 }
279 else
280 {
281 AddEveryNode(xDoc, parentNode, paras);
282 }
283 return true;
284 }
285 /// <summary>
286 /// 添加新节点
287 /// </summary>
288 /// <param name="fileFullName">文件名称,包括完整路径</param>
289 /// <param name="parentName">新节点的父节点名称</param>
290 /// <param name="paras">XML参数对象</param>
291 public static bool AddNewNode(string fileFullName, string parentName, params XmlParameter[] paras)
292 {
293 XmlDocument xDoc = xmlDoc(fileFullName);
294 XmlNode parentNode = GetNode(xDoc, parentName);
295 if (parentNode == null) return false;
296 if (parentNode.Name == xDoc.DocumentElement.Name)
297 {
298 XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.ChildNodes[0].Name, null);
299 AppendChild(xDoc, newNode, paras);
300 xDoc.DocumentElement.AppendChild(newNode);
301 }
302 else
303 {
304 AddEveryNode(xDoc, parentNode, paras);
305 }
306 xDoc.Save(fileFullName);
307 return true;
308 }
309 #endregion
310
311 #region AddAttribute
312 /// <summary>
313 /// 添加节点属性
314 /// </summary>
315 /// <param name="xDoc">XmlDocument对象</param>
316 /// <param name="node">节点对象</param>
317 /// <param name="namespaceOfPrefix">该节点的命名空间URI</param>
318 /// <param name="attributeName">新属性名称</param>
319 /// <param name="attributeValue">属性值</param>
320 public static void AddAttribute(XmlDocument xDoc, XmlNode node, string namespaceOfPrefix, string attributeName, string attributeValue)
321 {
322 string ns = namespaceOfPrefix == null ? null : node.GetNamespaceOfPrefix(namespaceOfPrefix);
323 XmlNode xn = xDoc.CreateNode(XmlNodeType.Attribute, attributeName, ns == "" ? null : ns);
324 xn.Value = attributeValue;
325 node.Attributes.SetNamedItem(xn);
326 }
327 /// <summary>
328 /// 添加节点属性
329 /// </summary>
330 /// <param name="xDoc">XmlDocument对象</param>
331 /// <param name="node">节点对象</param>
332 /// <param name="namespaceOfPrefix">该节点的命名空间URI</param>
333 /// <param name="attps">节点属性参数</param>
334 public static void AddAttribute(XmlDocument xDoc, XmlNode node, string namespaceOfPrefix, params AttributeParameter[] attps)
335 {
336 string ns = namespaceOfPrefix == null ? null : node.GetNamespaceOfPrefix(namespaceOfPrefix);
337 foreach (AttributeParameter attp in attps)
338 {
339 XmlNode xn = xDoc.CreateNode(XmlNodeType.Attribute, attp.Name, ns == "" ? null : ns);
340 xn.Value = attp.Value;
341 node.Attributes.SetNamedItem(xn);
342 }
343 }
344 /// <summary>
345 /// 添加节点属性
346 /// </summary>
347 /// <param name="fileFullName">文件名称,包括完整路径</param>
348 /// <param name="node">节点对象</param>
349 /// <param name="namespaceOfPrefix">该节点的命名空间URI</param>
350 /// <param name="attributeName">新属性名称</param>
351 /// <param name="attributeValue">属性值</param>
352 public static void AddAttribute(string fileFullName, XmlNode node, string namespaceOfPrefix, string attributeName, string attributeValue)
353 {
354 XmlDocument xDoc = xmlDoc(fileFullName);
355 AddAttribute(xDoc, node, namespaceOfPrefix, attributeName, attributeValue);
356 xDoc.Save(fileFullName);
357 }
358 /// <summary>
359 /// 添加节点属性
360 /// </summary>
361 /// <param name="fileFullName">文件名称,包括完整路径</param>
362 /// <param name="node">节点对象</param>
363 /// <param name="namespaceOfPrefix">该节点的命名空间URI</param>
364 /// <param name="attps">节点属性参数</param>
365 public static void AddAttribute(string fileFullName, XmlNode node, string namespaceOfPrefix, params AttributeParameter[] attps)
366 {
367 XmlDocument xDoc = xmlDoc(fileFullName);
368 AddAttribute(xDoc, node, namespaceOfPrefix, attps);
369 xDoc.Save(fileFullName);
370 }
371 /// <summary>
372 /// 添加节点属性
373 /// </summary>
374 /// <param name="xDoc">XmlDocument对象</param>
375 /// <param name="nodeName">节点名称</param>
376 /// <param name="namespaceOfPrefix">该节点的命名空间URI</param>
377 /// <param name="attributeName">新属性名称</param>
378 /// <param name="attributeValue">属性值</param>
379 public static void AddAttribute(XmlDocument xDoc, string nodeName, string namespaceOfPrefix, string attributeName, string attributeValue)
380 {
381 XmlNodeList xlst = xDoc.DocumentElement.ChildNodes;
382 for (int i = 0; i < xlst.Count; i++)
383 {
384 XmlNode node = GetNode(xlst[i], nodeName);
385 if (node == null) return;
386 string ns = namespaceOfPrefix == null ? null : node.GetNamespaceOfPrefix(namespaceOfPrefix);
387 XmlNode xn = xDoc.CreateNode(XmlNodeType.Attribute, attributeName, ns == "" ? null : ns);
388 xn.Value = attributeValue;
389 node.Attributes.SetNamedItem(xn);
390 }
391 }
392 /// <summary>
393 /// 添加节点属性
394 /// </summary>
395 /// <param name="xDoc">XmlDocument对象</param>
396 /// <param name="nodeName">节点名称</param>
397 /// <param name="namespaceOfPrefix">该节点的命名空间URI</param>
398 /// <param name="attps">节点属性参数</param>
399 public static void AddAttribute(XmlDocument xDoc, string nodeName, string namespaceOfPrefix, params AttributeParameter[] attps)
400 {
401 XmlNodeList xlst = xDoc.DocumentElement.ChildNodes;
402 for (int i = 0; i < xlst.Count; i++)
403 {
404 XmlNode node = GetNode(xlst[i], nodeName);
405 if (node == null) return;
406 string ns = namespaceOfPrefix == null ? null : node.GetNamespaceOfPrefix(namespaceOfPrefix);
407 foreach (AttributeParameter attp in attps)
408 {
409 XmlNode xn = xDoc.CreateNode(XmlNodeType.Attribute, attp.Name, ns == "" ? null : ns);
410 xn.Value = attp.Value;
411 node.Attributes.SetNamedItem(xn);
412 }
413 }
414 }
415 /// <summary>
416 /// 添加节点属性
417 /// </summary>
418 /// <param name="fileFullName">文件名称,包括完整路径</param>
419 /// <param name="nodeName">节点名称</param>
420 /// <param name="namespaceOfPrefix">该节点的命名空间URI</param>
421 /// <param name="attributeName">新属性名称</param>
422 /// <param name="attributeValue">属性值</param>
423 public static void AddAttribute(string fileFullName, string nodeName, string namespaceOfPrefix, string attributeName, string attributeValue)
424 {
425 XmlDocument xDoc = xmlDoc(fileFullName);
426 XmlNodeList xlst = xDoc.DocumentElement.ChildNodes;
427 for (int i = 0; i < xlst.Count; i++)
428 {
429 XmlNode node = GetNode(xlst[i], nodeName);
430 if (node == null) break;
431 AddAttribute(xDoc, node, namespaceOfPrefix, attributeName, attributeValue);
432 }
433 xDoc.Save(fileFullName);
434 }
435 /// <summary>
436 /// 添加节点属性
437 /// </summary>
438 /// <param name="fileFullName">文件名称,包括完整路径</param>
439 /// <param name="nodeName">节点名称</param>
440 /// <param name="namespaceOfPrefix">该节点的命名空间URI</param>
441 /// <param name="attps">节点属性参数</param>
442 public static void AddAttribute(string fileFullName, string nodeName, string namespaceOfPrefix, params AttributeParameter[] attps)
443 {
444 XmlDocument xDoc = xmlDoc(fileFullName);
445 XmlNodeList xlst = xDoc.DocumentElement.ChildNodes;
446 for (int i = 0; i < xlst.Count; i++)
447 {
448 XmlNode node = GetNode(xlst[i], nodeName);
449 if (node == null) break;
450 AddAttribute(xDoc, node, namespaceOfPrefix, attps);
451 }
452 xDoc.Save(fileFullName);
453 }
454 #endregion
455
456 #region GetNode
457 /// <summary>
458 /// 获取指定节点名称的节点对象
459 /// </summary>
460 /// <param name="fileFullName">文件名称,包括完整路径</param>
461 /// <param name="nodeName">节点名称</param>
462 /// <returns></returns>
463 public static XmlNode GetNode(string fileFullName, string nodeName)
464 {
465 XmlDocument xDoc = xmlDoc(fileFullName);
466 if (xDoc.DocumentElement.Name == nodeName) return (XmlNode)xDoc.DocumentElement;
467 XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
468 foreach (XmlNode xns in nlst) // 遍历所有子节点
469 {
470 if (xns.Name.ToLower() == nodeName.ToLower()) return xns;
471 else
472 {
473 XmlNode xn = GetNode(xns, nodeName);
474 if (xn != null) return xn; /// V1.0.0.3添加节点判断
475 }
476 }
477 return null;
478 }
479 /// <summary>
480 /// 获取指定节点名称的节点对象
481 /// </summary>
482 /// <param name="node">节点对象</param>
483 /// <param name="nodeName">节点名称</param>
484 /// <returns></returns>
485 public static XmlNode GetNode(XmlNode node, string nodeName)
486 {
487 foreach (XmlNode xn in node)
488 {
489 if (xn.Name.ToLower() == nodeName.ToLower()) return xn;
490 else
491 {
492 XmlNode tmp = GetNode(xn, nodeName);
493 if (tmp != null) return tmp;
494 }
495 }
496 return null;
497 }
498 /// <summary>
499 /// 获取指定节点名称的节点对象
500 /// </summary>
501 /// <param name="xDoc">XmlDocument对象</param>
502 /// <param name="nodeName">节点名称</param>
503 /// <returns></returns>
504 public static XmlNode GetNode(XmlDocument xDoc, string nodeName)
505 {
506 if (xDoc.DocumentElement.Name == nodeName) return (XmlNode)xDoc.DocumentElement;
507 XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
508 foreach (XmlNode xns in nlst) // 遍历所有子节点
509 {
510 if (xns.Name.ToLower() == nodeName.ToLower()) return xns;
511 else
512 {
513 XmlNode xn = GetNode(xns, nodeName);
514 if (xn != null) return xn; /// 添加节点判断, 避免只查询一个节点
515 }
516 }
517 return null;
518 }
519 /// <summary>
520 /// 获取指定节点名称的节点对象
521 /// </summary>
522 /// <param name="xDoc">XmlDocument对象</param>
523 /// <param name="Index">节点索引</param>
524 /// <param name="nodeName">节点名称</param>
525 public static XmlNode GetNode(XmlDocument xDoc, int Index, string nodeName)
526 {
527 XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
528 if (nlst.Count <= Index) return null;
529 if (nlst[Index].Name.ToLower() == nodeName.ToLower()) return (XmlNode)nlst[Index];
530 foreach (XmlNode xn in nlst[Index])
531 {
532 return GetNode(xn, nodeName);
533 }
534 return null;
535 }
536 /// <summary>
537 /// 获取指定节点名称的节点对象
538 /// </summary>
539 /// <param name="fileFullName">文件名称,包括完整路径</param>
540 /// <param name="Index">节点索引</param>
541 /// <param name="nodeName">节点名称</param>
542 public static XmlNode GetNode(string fileFullName, int Index, string nodeName)
543 {
544 XmlDocument xDoc = xmlDoc(fileFullName);
545 XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
546 if (nlst.Count <= Index) return null;
547 if (nlst[Index].Name.ToLower() == nodeName.ToLower()) return (XmlNode)nlst[Index];
548 foreach (XmlNode xn in nlst[Index])
549 {
550 return GetNode(xn, nodeName);
551 }
552 return null;
553 }
554 /// <summary>
555 /// 获取指定节点名称的节点对象
556 /// </summary>
557 /// <param name="node">节点对象</param>
558 /// <param name="nodeName">节点名称</param>
559 /// <param name="innerText">节点内容</param>
560 public static XmlNode GetNode(XmlNode node, string nodeName, string innerText)
561 {
562 foreach (XmlNode xn in node)
563 {
564 if (xn.Name.ToLower() == nodeName.ToLower() && xn.InnerText == innerText) return xn;
565 else
566 {
567 XmlNode tmp = GetNode(xn, nodeName, innerText);
568 if (tmp != null) return tmp;
569 }
570 }
571 return null;
572 }
573 /// <summary>
574 /// 获取指定节点名称的节点对象
575 /// </summary>
576 /// <param name="xDoc">XmlDocument对象</param>
577 /// <param name="nodeName">节点名称</param>
578 /// <param name="innerText">节点内容</param>
579 public static XmlNode GetNode(XmlDocument xDoc, string nodeName, string innerText)
580 {
581 XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
582 foreach (XmlNode xns in nlst) // 遍历所有子节点
583 {
584 if (xns.Name.ToLower() == nodeName.ToLower() && xns.InnerText == innerText) return xns;
585 XmlNode tmp = GetNode(xns, nodeName, innerText);
586 if (tmp != null) return tmp;
587 }
588 return null;
589 }
590 /// <summary>
591 /// 获取指定节点名称的节点对象
592 /// </summary>
593 /// <param name="xDoc">XmlDocument对象</param>
594 /// <param name="xpar">XML参数</param>
595 public static XmlNode GetNode(XmlDocument xDoc, XmlParameter xpar)
596 {
597 return GetNode(xDoc, xpar.Name, xpar.InnerText);
598 }
599 /// <summary>
600 /// 获取指定节点名称的节点对象
601 /// </summary>
602 /// <param name="node">节点对象</param>
603 /// <param name="xpar">XML参数</param>
604 public static XmlNode GetNode(XmlNode node, XmlParameter xpar)
605 {
606 return GetNode(node, xpar.Name, node.InnerText);
607 }
608 #endregion
609
610 #region UpdateNode
611 /// <summary>
612 /// 修改节点的内容
613 /// </summary>
614 /// <param name="node">修改的节点对象</param>
615 /// <param name="para">XML参数对象</param>
616 public static void UpdateNode(XmlNode node, XmlParameter para)
617 {
618 node.InnerText = para.InnerText;
619 for (int i = 0; i < para.Attributes.Length; i++)
620 {
621 node.Attributes.Item(i).Value = para.Attributes[i].Value;
622 }
623 }
624 /// <summary>
625 /// 修改节点的内容
626 /// </summary>
627 /// <param name="node">父节点对象</param>
628 /// <param name="childIndex">该节点的索引</param>
629 /// <param name="nodeText">修改后的内容</param>
630 public static void UpdateNode(XmlNode node, int childIndex, string nodeText)
631 {
632 node.ChildNodes[childIndex].InnerText = nodeText;
633 }
634 /// <summary>
635 /// 修改节点的内容
636 /// </summary>
637 /// <param name="node">修改的节点对象</param>
638 /// <param name="nodeText">修改后的内容</param>
639 public static void UpdateNode(XmlNode node, string nodeText)
640 {
641 node.InnerText = nodeText;
642 }
643 /// <summary>
644 /// 修改节点的内容
645 /// </summary>
646 /// <param name="xDoc">XMLDocument对象</param>
647 /// <param name="para">XML参数对象</param>
648 public static void UpdateNode(XmlDocument xDoc, int Index, XmlParameter para)
649 {
650 XmlNode node = GetNode(xDoc, Index, para.Name);
651 UpdateNode(node, para);
652 }
653 /// <summary>
654 /// 修改节点的内容
655 /// </summary>
656 /// <param name="xDoc">XMLDocument对象</param>
657 /// <param name="nodeName">父节点名称</param>
658 /// <param name="childIndex">该节点的索引</param>
659 /// <param name="nodeText">修改后的内容</param>
660 /// <param name="nodeValue">修改后的值,如果没有,那么该值为null</param>
661 public static void UpdateNode(XmlDocument xDoc, int Index, string nodeName, int childIndex, string nodeText)
662 {
663 XmlNode node = GetNode(xDoc, Index, nodeName);
664 UpdateNode(node, childIndex, nodeText);
665 }
666 /// <summary>
667 /// 修改节点的内容
668 /// </summary>
669 /// <param name="xDoc">XMLDocument对象</param>
670 /// <param name="nodeName">修改的节点名称</param>
671 /// <param name="nodeText">修改后的内容</param>
672 /// <param name="nodeValue">修改后的值,如果没有,那么该值为null</param>
673 public static void UpdateNode(XmlDocument xDoc, int Index, string nodeName, string nodeText)
674 {
675 XmlNode node = GetNode(xDoc, Index, nodeName);
676 UpdateNode(node, nodeText);
677 }
678 /// <summary>
679 /// 修改节点的内容
680 /// </summary>
681 /// <param name="fileFullName">文件名称,包括完整路径</param>
682 /// <param name="para">XML参数对象</param>
683 public static void UpdateNode(string fileFullName, int Index, XmlParameter para)
684 {
685 XmlDocument xDoc = xmlDoc(fileFullName);
686 UpdateNode(xDoc, Index, para);
687 xDoc.Save(fileFullName);
688 }
689 /// <summary>
690 /// 修改节点的内容
691 /// </summary>
692 /// <param name="fileFullName">文件名称,包括完整路径</param>
693 /// <param name="nodeName">父节点名称</param>
694 /// <param name="childIndex">该节点的索引</param>
695 /// <param name="nodeText">修改后的内容</param>
696 public static void UpdateNode(string fileFullName, int Index, string nodeName, int childIndex, string nodeText)
697 {
698 XmlDocument xDoc = xmlDoc(fileFullName);
699 UpdateNode(xDoc, Index, nodeName, childIndex, nodeText);
700 xDoc.Save(fileFullName);
701 }
702 /// <summary>
703 /// 修改节点的内容
704 /// </summary>
705 /// <param name="fileFullName">文件名称,包括完整路径</param>
706 /// <param name="nodeName">修改的节点名称</param>
707 /// <param name="nodeText">修改后的内容</param>
708 public static void UpdateNode(string fileFullName, int Index, string nodeName, string nodeText)
709 {
710 XmlDocument xDoc = xmlDoc(fileFullName);
711 UpdateNode(xDoc, Index, nodeName, nodeText);
712 xDoc.Save(fileFullName);
713 }
714 #endregion
715
716 #region DeleteNode
717 /// <summary>
718 /// 删除节点
719 /// </summary>
720 /// <param name="xDoc">XmlDocument对象</param>
721 /// <param name="Index">节点索引</param>
722 public static void DeleteNode(XmlDocument xDoc, int Index)
723 {
724 XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
725 nlst[Index].ParentNode.RemoveChild(nlst[Index]);
726 }
727 /// <summary>
728 /// 删除节点
729 /// </summary>
730 /// <param name="fileFullName">文件名称,包括完整路径</param>
731 /// <param name="Index">节点索引</param>
732 public static void DeleteNode(string fileFullName, int Index)
733 {
734 XmlDocument xDoc = xmlDoc(fileFullName);
735 DeleteNode(xDoc, Index);
736 xDoc.Save(fileFullName);
737 }
738 /// <summary>
739 /// 删除节点
740 /// </summary>
741 /// <param name="xDoc">XmlDocument对象</param>
742 /// <param name="xns">需要删除的节点对象</param>
743 public static void DeleteNode(XmlDocument xDoc, params XmlNode[] xns)
744 {
745 foreach (XmlNode xnl in xns)
746 {
747 foreach (XmlNode xn in xDoc.DocumentElement.ChildNodes)
748 {
749 if (xnl.Equals(xn))
750 {
751 xn.ParentNode.RemoveChild(xn);
752 break;
753 }
754 }
755 }
756 }
757 /// <summary>
758 /// 删除节点
759 /// </summary>
760 /// <param name="fileFullName">文件名称,包括完整路径</param>
761 /// <param name="xns">需要删除的节点对象</param>
762 public static void DeleteNode(string fileFullName, params XmlNode[] xns)
763 {
764 XmlDocument xDoc = xmlDoc(fileFullName);
765 DeleteNode(xDoc, xns);
766 xDoc.Save(fileFullName);
767 }
768 /// <summary>
769 /// 删除节点
770 /// </summary>
771 /// <param name="xDoc">XmlDocument对象</param>
772 /// <param name="nodeName">节点名称</param>
773 /// <param name="nodeText">节点内容</param>
774 public static void DeleteNode(XmlDocument xDoc, string nodeName, string nodeText)
775 {
776 foreach (XmlNode xn in xDoc.DocumentElement.ChildNodes)
777 {
778 if (xn.Name == nodeName)
779 {
780 if (xn.InnerText == nodeText)
781 {
782 xn.ParentNode.RemoveChild(xn);
783 return;
784 }
785 }
786 else
787 {
788 XmlNode node = GetNode(xn, nodeName);
789 if (node != null && node.InnerText == nodeText)
790 {
791 node.ParentNode.ParentNode.RemoveChild(node.ParentNode);
792 return;
793 }
794 }
795 }
796 }
797 /// <summary>
798 /// 删除节点
799 /// </summary>
800 /// <param name="fileFullName">文件名称,包括完整路径</param>
801 /// <param name="nodeName">节点名称</param>
802 /// <param name="nodeText">节点内容</param>
803 public static void DeleteNode(string fileFullName, string nodeName, string nodeText)
804 {
805 XmlDocument xDoc = xmlDoc(fileFullName);
806 DeleteNode(xDoc, nodeName, nodeText);
807 xDoc.Save(fileFullName);
808 }
809 #endregion
810
811 #region SetAttribute
812 /// <summary>
813 /// 修改属性值
814 /// </summary>
815 /// <param name="node">节点对象</param>
816 /// <param name="attps">属性参数</param>
817 public static void SetAttribute(XmlNode node, params AttributeParameter[] attps)
818 {
819 XmlElement xe = (XmlElement)node;
820 foreach (AttributeParameter attp in attps)
821 {
822 xe.SetAttribute(attp.Name, attp.Value);
823 }
824 }
825 /// <summary>
826 /// 修改属性值
827 /// </summary>
828 /// <param name="node">节点对象</param>
829 /// <param name="attributeName">属性名称</param>
830 /// <param name="attributeValue">属性值</param>
831 public static void SetAttribute(XmlNode node, string attributeName, string attributeValue)
832 {
833 XmlElement xe = (XmlElement)node;
834 xe.SetAttribute(attributeName, attributeValue);
835 }
836 /// <summary>
837 /// 修改属性值
838 /// </summary>
839 /// <param name="elem">元素对象</param>
840 /// <param name="attps">属性参数</param>
841 public static void SetAttribute(XmlElement elem, params AttributeParameter[] attps)
842 {
843 foreach (AttributeParameter attp in attps)
844 {
845 elem.SetAttribute(attp.Name, attp.Value);
846 }
847 }
848 /// <summary>
849 /// 修改属性值
850 /// </summary>
851 /// <param name="elem">元素对象</param>
852 /// <param name="attributeName">属性名称</param>
853 /// <param name="attributeValue">属性值</param>
854 public static void SetAttribute(XmlElement elem, string attributeName, string attributeValue)
855 {
856 elem.SetAttribute(attributeName, attributeValue);
857 }
858 /// <summary>
859 /// 修改属性值
860 /// </summary>
861 /// <param name="xDoc">XmlDocument对象</param>
862 /// <param name="xpara">XML参数</param>
863 /// <param name="attps">属性参数</param>
864 public static void SetAttribute(XmlDocument xDoc, XmlParameter xpara, params AttributeParameter[] attps)
865 {
866 XmlElement xe = (XmlElement)GetNode(xDoc, xpara);
867 if (xe == null) return;
868 SetAttribute(xe, attps);
869 }
870 /// <summary>
871 /// 修改属性值
872 /// </summary>
873 /// <param name="xDoc">XmlDocument对象</param>
874 /// <param name="xpara">XML参数</param>
875 /// <param name="newValue">新属性值</param>
876 public static void SetAttribute(XmlDocument xDoc, XmlParameter xpara, string attributeName, string newValue)
877 {
878 XmlElement xe = (XmlElement)GetNode(xDoc, xpara);
879 if (xe == null) return;
880 SetAttribute(xe, attributeName, newValue);
881 }
882 /// <summary>
883 /// 修改属性值
884 /// </summary>
885 /// <param name="fileFullName">文件名称,包括完整路径</param>
886 /// <param name="xpara">XML参数</param>
887 /// <param name="newValue">新属性值</param>
888 public static void SetAttribute(string fileFullName, XmlParameter xpara, string attributeName, string newValue)
889 {
890 XmlDocument xDoc = xmlDoc(fileFullName);
891 SetAttribute(xDoc, xpara, attributeName, newValue);
892 xDoc.Save(fileFullName);
893 }
894 /// <summary>
895 /// 修改属性值
896 /// </summary>
897 /// <param name="fileFullName">文件名称,包括完整路径</param>
898 /// <param name="xpara">XML参数</param>
899 /// <param name="attps">属性参数</param>
900 public static void SetAttribute(string fileFullName, XmlParameter xpara, params AttributeParameter[] attps)
901 {
902 XmlDocument xDoc = xmlDoc(fileFullName);
903 SetAttribute(xDoc, xpara, attps);
904 xDoc.Save(fileFullName);
905 }
906 #endregion
907 }
908
909 public sealed class XmlParameter
910 {
911 private string name;
912 private string innerText;
913 private string namespaceOfPrefix;
914 private AttributeParameter[] attributes;
915
916 public XmlParameter()
917 {
918 //
919 // TODO: Add constructor logic here
920 //
921 this.namespaceOfPrefix = null;
922 }
923
924 public XmlParameter(string name, params AttributeParameter[] attParas)
925 {
926 this.name = name;
927 this.namespaceOfPrefix = null;
928 this.attributes = attParas;
929 }
930
931
932 public XmlParameter(string name, string innerText, params AttributeParameter[] attParas)
933 {
934 this.name = name;
935 this.innerText = innerText;
936 this.namespaceOfPrefix = null;
937 this.attributes = attParas;
938 }
939
940 public XmlParameter(string name, string innerText, string namespaceOfPrefix, params AttributeParameter[] attParas)
941 {
942 this.name = name;
943 this.innerText = innerText;
944 this.namespaceOfPrefix = namespaceOfPrefix;
945 this.attributes = attParas;
946 }
947
948 public string Name
949 {
950 get { return this.name; }
951 set { this.name = value; }
952 }
953
954 public string InnerText
955 {
956 get { return this.innerText; }
957 set { this.innerText = value; }
958 }
959
960 public string NamespaceOfPrefix
961 {
962 get { return this.namespaceOfPrefix; }
963 set { this.namespaceOfPrefix = value; }
964 }
965
966 public AttributeParameter[] Attributes
967 {
968 get { return this.attributes; }
969 set { this.attributes = value; }
970 }
971 }
972
973 public sealed class AttributeParameter
974 {
975 private string name;
976 private string value;
977
978 public AttributeParameter()
979 {
980 //
981 // TODO: Add constructor logic here
982 //
983 }
984 public AttributeParameter(string attributeName, string attributeValue)
985 {
986 this.name = attributeName;
987 this.value = attributeValue;
988 }
989 public string Name
990 {
991 get { return this.name; }
992 set { this.name = value; }
993 }
994 public string Value
995 {
996 get { return this.value; }
997 set { this.value = value; }
998 }
999 }
1000
1001 }