1 using System;
2 using System.Collections.Generic;
3
4 //用KVP来代替KeyValuePair<string,string>;相当于C中的typedef
5 using KVP = System.Collections.Generic.KeyValuePair<string,string>;
6 using System.Linq;
7 using System.Text;
8 using System.Xml.Linq;
9 using System.IO;
10 using System.Collections;
11
12 namespace Helper
13 {
14 class xmlHelper
15 {
16 public xmlHelper()
17 { }
18
19 #region 创建XML
20 /// <summary>
21 /// 创建XML,
22 /// 首先根据要创建的路径是否有要创建的xml文档,
23 /// 若有,则不做操作直接返回。
24 /// 若无,则按要求新建XML文档。
25 /// </summary>
26 /// <param name="xmlPath">xml所在路径(不包含文件名)</param>
27 /// <param name="xmlName">xml文件名</param>
28 /// <param name="declaration">新建xml的声明(XDeclaration类型)</param>
29 /// <param name="comment">新建xml的注释(XComment类型)</param>
30 /// <param name="element">新建xml节点(XElement类型),可多个节点嵌套</param>
31 public static void creatXML(string xmlPath,string xmlName,XDeclaration declaration,XComment comment,XElement element)
32 {
33 //将xml文件夹路径和xml文件名合成完整路径
34 string path = Path.Combine(xmlPath,xmlName);
35 //判断文件是否存在
36 //若存在则返回
37 //若不存在则按要求新建
38 if (File.Exists(path))
39 {
40 return;
41 }
42 else
43 {
44 XDocument doc = new XDocument(
45 declaration,
46 comment,
47 element
48 );
49 doc.Save(path);
50 }
51 }
52 /// <summary>
53 /// 创建XML,
54 /// 首先根据要创建的路径是否有要创建的xml文档,
55 /// 若有,则不做操作直接返回。
56 /// 若无,则按要求新建XML文档。
57 /// 默认version="1.0",encoding="utf-8",standalone="yes"
58 /// </summary>
59 /// <param name="xmlPath">xml所在路径(不包含文件名)</param>
60 /// <param name="xmlName">xml文件名</param>
61 /// <param name="comment">新建xml的注释(XComment类型)</param>
62 /// <param name="element">新建xml节点(XElement类型),可多个节点嵌套</param>
63 public static void creatXML(string xmlPath, string xmlName,XComment comment,XElement element)
64 {
65 //将xml文件夹路径和xml文件名合成完整路径
66 string path = Path.Combine(xmlPath, xmlName);
67 //判断文件是否存在
68 //若存在则返回
69 //若不存在则按要求新建
70 if (File.Exists(path))
71 {
72 return;
73 }
74 else
75 {
76 XDocument doc = new XDocument(
77 new XDeclaration("1.0","utf-8","yes"),
78 comment,
79 element
80 );
81 doc.Save(path);
82 }
83 }
84
85 #endregion
86
87 #region 查询XML
88 /// <summary>
89 /// 根据节点名称查询
90 /// </summary>
91 /// <param name="xmlPath">文件所在位置的路径(包括文件名)</param>
92 /// <param name="NodeName">所要查询的节点名称</param>
93 /// <returns>返回所有节点的泛型集合(List类型)</returns>
94 public static List<XElement> Query(string xmlPath,string NodeName)
95 {
96 XElement xel = XElement.Load(xmlPath);
97 List<XElement> list = new List<XElement>();
98 var elements = from el in xel.Descendants(NodeName) select el;
99 foreach (XElement e in elements)
100 {
101 list.Add(e);
102 }
103 return list;
104 }
105 /// <summary>
106 /// 根据节点名称和属性查询特定节点
107 /// </summary>
108 /// <param name="xmlPath">文件所在位置的路径(包括文件名)</param>
109 /// <param name="NodeName">所要查询的节点名称</param>
110 /// <param name="ATT">所要查询的节点的属性名称及值KeyValuePair(属性名称,属性值)</param>
111 /// <returns>返回符合条件的xml元素集合</returns>
112 public static List<XElement> Query(string xmlPath, string NodeName,KVP ATT)
113 {
114 XElement xel = XElement.Load(xmlPath);
115 List<XElement> list = new List<XElement>();
116 var elements = from el in xel.Descendants(NodeName)
117 where el.Attribute(ATT.Key).Value == ATT.Value
118 select el;
119 foreach (XElement e in elements)
120 {
121 list.Add(e);
122 }
123 return list;
124 }
125 #endregion
126
127 #region 添加节点
128 /// <summary>
129 /// 插入节点
130 /// </summary>
131 /// <param name="xmlPath">文件所在位置的路径(包括文件名)</param>
132 /// <param name="FatherNodeName">所要插入节点的父节点名称</param>
133 /// <param name="FatherNodeAttribute">所要插入节点的父节点属性名称及值KeyValuePair(属性名称,属性值)</param>
134 /// <param name="NewNode">要插入的新节点(XElement)</param>
135 public static void InsertNode(string xmlPath,string FatherNodeName,
136 KVP FatherNodeAttribute,XElement NewNode)
137 {
138 XElement xel = XElement.Load(xmlPath);
139 var elements = from el in xel.Descendants(FatherNodeName)
140 where el.Attribute(FatherNodeAttribute.Key).Value == FatherNodeAttribute.Value
141 select el;
142 foreach (XElement e in elements)
143 {
144 e.Add(NewNode);
145 }
146 xel.Save(xmlPath);
147 }
148
149 #endregion
150
151 #region 修改节点
152 /// <summary>
153 /// 修改指定节点的内容
154 /// </summary>
155 /// <param name="xmlPath">文件所在位置的路径(包括文件名)</param>
156 /// <param name="NodeName">要修改的节点名称</param>
157 /// <param name="ATT">要修改的节点的属性名及值(根据此属性名确定具体要修改哪一个节点)KeyValuePair(属性名称,属性值)</param>
158 /// <param name="NewAtt">要修改的子元素名称及值KeyValuePair(子元素名,子元素值)</param>
159 public static void Modify(string xmlPath,string NodeName,KVP ATT,KVP NewAtt)
160 {
161 XElement xel = XElement.Load(xmlPath);
162 var elements = from el in xel.Descendants(NodeName)
163 where el.Attribute(ATT.Key).Value == ATT.Value
164 select el;
165 foreach (XElement e in elements)
166 {
167 e.Element(NewAtt.Key).SetValue(NewAtt.Value);
168 }
169 xel.Save(xmlPath);
170 }
171 #endregion
172 }
173 }