Linq to XML

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Configuration;
  6 using CS.Model;
  7 using System.Xml;
  8 using System.Xml.Linq;
  9 using System.IO;
 10 using System.Reflection;
 11 
 12 namespace CS.Linq
 13 {
 14     class CTServer
 15     {
 16 
 17         static string[] XMLFile = null;
 18         static string XMLName = string.Empty;
 19         static string XMLFilePath = string.Empty;
 20 
 21         public CTServer()
 22         {
 23         }
 24 
 25         /// <summary>
 26         /// 创建XML文件
 27         /// </summary>
 28         private static void CreateXMLDocument()
 29         {
 30             XDocument XD = new XDocument(
 31                     new XComment("Current Informmation of CS"),
 32                     new XElement("CS", new XAttribute("Type", "CS"),
 33                         new XElement("ServerInfo",
 34                             new XAttribute("Type", "SI"),
 35                             new XElement("Server", 
 36                                 new XAttribute("Type", "Server"),
 37                                 new XAttribute("zIndex","1"),
 38                                 new XElement("ServerName", 
 39                                     new XAttribute("Type", "SN"), "127.0.0.1"),
 40                                 new XElement("Remembe", new XAttribute("SNA", "127.0.0.1"), 
 41                                     new XAttribute("Value", "NO"),
 42                                     new XElement("UserName", new XAttribute("Type", "UN"), "******"),
 43                                     new XElement("PassWord", new XAttribute("Type", "PW"), "******")
 44                                     )
 45                                 )
 46                             ),
 47                         new XElement("ConnStr", "Data Source=ServerName;Initial Catalog=master;User ID=UserID;password=PassWord"),
 48                         new XElement("DefaultCodePath",new XAttribute("IsStart","NO"),"NotDefaultPath")
 49                     )
 50                 );
 51             XD.Save("Server.xml", SaveOptions.DisableFormatting);
 52             File.SetAttributes("Server.xml", FileAttributes.Compressed);
 53         }
 54 
 55 
 56         /// <summary>
 57         /// 返回服务器地址
 58         /// </summary>
 59         /// <returns></returns>
 60         public static List<CBDataModel> GetServerInfo()
 61         {
 62             List<CBDataModel> strList = new List<CBDataModel>();
 63             CBDataModel cm = null;
 64             IEnumerable<XElement> serverName = GetServerNameModel();
 65             if (serverName != null)
 66             {
 67                 foreach (XElement sn in serverName)
 68                 {
 69                     cm = new CBDataModel();
 70                     cm.Name = sn.Value.ToString();
 71                     cm.Value += 1;
 72                     strList.Add(cm);
 73                 }
 74             }
 75             if (strList.Count == 0)
 76             {
 77                 cm = new CBDataModel();
 78                 cm.Name = "127.0.0.1";
 79                 cm.Value = 1;
 80                 strList.Add(cm);
 81             }
 82             return strList;
 83         }
 84 
 85 
 86         /// <summary>
 87         /// 获取服务器地址   公用
 88         /// </summary>
 89         /// <param name="xmlFile"></param>
 90         /// <returns></returns>
 91         private static IEnumerable<XElement> GetServerNameModel()
 92         {
 93             XElement XE = GetXmlElement();
 94             IEnumerable<XElement> serverName = null;
 95             if (XE != null)
 96             {
 97                 serverName =
 98                     from x in
 99                         XE.Elements("ServerInfo").Elements("Server").OrderBy(e => e.Attribute("zIndex").Value).Elements("ServerName")
100                     where (string)x.Attribute("Type") == "SN"
101                     select x;     
102             }
103             return serverName;
104         }
105 
106 
107         /// <summary>
108         /// 获取XElement对象
109         /// </summary>
110         /// <returns></returns>
111         private static XElement GetXmlElement()
112         {
113             XElement X = null;
114             string XPath = Assembly.GetEntryAssembly().Location;
115             XPath = XPath.Substring(0, XPath.LastIndexOf('\\'));
116             XMLFile = Directory.GetFiles(XPath, "*.xml", SearchOption.AllDirectories);
117             if (XMLFile.Length > 0)
118             {
119                 X = IsSN(XMLFile);
120             }
121             else
122                 //如何不存在XML文件,则创建
123                 CreateXMLDocument();
124             return X;
125         }
126 
127 
128         /// <summary>
129         /// 修改xml 文件,添加服务器地址或修改服务器地址信息
130         /// </summary>
131         /// <param name="serverName"></param>
132         public static void SetServerFineParams(CBDataModel model)
133         {
134             int i = 0;
135             XElement X = GetXmlElement();
136             IEnumerable<XElement> XE = GetServerNameModel();
137             //元素属性为zIndex所有元素的zIndex属性值为none;表示不是默认服务器地址
138             foreach (XElement item in from se in X.Elements("ServerInfo").Elements("Server") select se)
139             {
140                 item.Attribute("zIndex").Value = "none";
141             }
142             foreach (XElement item in XE)
143             {
144                 if (item.Value == model.ServerName)
145                 {
146                     //如果存在服务器数据,验证是否保存密码,如有改动,则修改xml文件
147                     IEnumerable<XElement> element =
148                             from sna
149                                 in X.Elements("ServerInfo").Elements("Server").Elements("Remembe")
150                             where (string)sna.Attribute("SNA") == model.ServerName
151                             select sna;
152                     foreach (XElement el in element)
153                     {
154                         //下一次启动为默认服务器地址,启动自动填补
155                         el.Parent.SetAttributeValue("zIndex",model.ZIndex);
156                         //
157                         if ((bool)model.RememberMe && model.UserId != "" && model.PassWord != "")
158                         {
159                             //用户名,密码保存
160                             if (el.Attribute("Value").Value != "YES")
161                             {
162                                 el.Attribute("Value").Value = "YES";
163                                 el.SetElementValue("UserName", model.UserId);
164                                 el.SetElementValue("PassWord", model.PassWord);
165                             }
166                         }
167                         else
168                         {
169                             //取消记住密码,用户名,密码恢复默认
170                             if (el.Attribute("Value").Value != "NO")
171                             {
172                                 el.Attribute("Value").Value = "NO";
173                                 el.SetElementValue("UserName", "******");
174                                 el.SetElementValue("PassWord", "******");
175                             }
176                         }
177                     }
178                     i++;
179                 }
180             }
181             if (i == 0)
182             {
183                 //添加新元素
184                 var IX = X.Elements("ServerInfo").FirstOrDefault(e => e.Attribute("Type").Value == "SI");
185                 if (IX != null)
186                 {
187                     IX.AddFirst(new XElement("Server", 
188                         new XAttribute("Type", "Server"), 
189                         new XAttribute("zIndex",model.ZIndex),
190                                new XElement("ServerName", 
191                                    new XAttribute("Type", "SN"), model.ServerName),
192                                new XElement("Remembe", 
193                                    new XAttribute("SNA", model.ServerName), 
194                                    new XAttribute("Value", model.RememberMe == true ? "YES" : "NO"),
195                                new XElement("UserName", 
196                                    new XAttribute("Type", "UN"), model.RememberMe == true ? model.UserId : "******"),
197                                 new XElement("PassWord", 
198                                     new XAttribute("Type", "PW"), model.RememberMe == true ? model.PassWord : "******")
199                                     )
200                                 )
201                         );
202                 }
203             }
204             X.Save(XMLName);
205         }
206 
207 
208         /// <summary>
209         /// 检查XML文件是否是服务器信息文件
210         /// </summary>
211         /// <param name="xmlFile"></param>
212         /// <returns></returns>
213         private static XElement IsSN(string[] xmlFile)
214         {
215             XElement X = null;
216             foreach (string item in xmlFile)
217             {
218                 XElement xf = XElement.Load(item);
219                 var element = from x
220                                             in xf.Elements()
221                               where xf.Name.ToString() == "CS" && (string)xf.Attribute("Type") == "CS"
222                               select x;
223                 if (element.ToList().Count > 0)
224                 {
225                     XMLName = item.Substring(item.LastIndexOf('\\') + 1, item.Length - (item.LastIndexOf('\\') + 1));
226                     X = xf;
227                     break;
228                 }
229             }
230             return X;
231         }
232 
233         /// <summary>
234         /// 
235         /// </summary>
236         /// <param name="model"></param>
237         /// <returns></returns>
238         public static CBDataModel GetServerData(CBDataModel model)
239         {
240             XElement X = GetXmlElement();
241             CBDataModel cm = null;
242             var XE = from xe in
243                          (
244                              from server in
245                                  X.Elements("ServerInfo").Descendants("Server").Where(
246                                  e => e.Element("ServerName").Value == model.ServerName
247                                  )
248                              select server).Descendants("Remembe") 
249                      where (string)xe.Attribute("SNA") == model.ServerName
250                      select xe;
251             foreach (var item in XE)
252             {
253                 if (item.Attribute("Value").Value == "YES")
254                 {
255                     cm = new CBDataModel();
256                     foreach (var UI in from un in item.Elements("UserName") select un.Value) 
257                     {
258                         cm.UserId = UI;
259                     }
260                     foreach (var PW in from pw in item.Elements("PassWord") select pw.Value)
261                     {
262                         cm.PassWord = PW;
263                     }
264                     cm.RememberMe = true;
265                 }
266             }
267 
268             //
269             return cm;
270         }
271 
272         /// <summary>
273         /// 返回连接字符串
274         /// </summary>
275         /// <param name="model"></param>
276         /// <returns></returns>
277         public static string GetConnStr(CBDataModel model)
278         {
279             string Constr = string.Empty;
280             XElement X = GetXmlElement();
281             IEnumerable<XElement> str = from cs in X.Elements("ConnStr") select cs;
282             foreach (var item in str)
283             {
284                 Constr = item.Value;
285             }
286             Constr = Constr.Replace("ServerName", model.ServerName);
287             Constr = Constr.Replace("master", model.DataBase != "" ? model.DataBase : "");
288             Constr = Constr.Replace("UserID", model.UserId);
289             Constr = Constr.Replace("PassWord", model.PassWord);
290             return Constr;
291         }
292 
293         /// <summary>
294         /// 获取代码存放默认路径
295         /// </summary>
296         /// <returns></returns>
297         public static string GetCodeDefaultPath()
298         {
299             string codePath = string.Empty;
300             XElement element = GetXmlElement();
301             IEnumerable<XElement> xPath = from xelement in element.Elements("DefaultCodePath") select xelement;
302             foreach (var item in xPath)
303             {
304                 if (item.Attribute("IsStart").Value == "YES")
305                 {
306                      codePath = item.Value;
307                 }
308             }
309             return codePath;
310         }
311 
312         public static void SetCodeDefaultPath(string path)
313         {
314             XElement xelement = GetXmlElement();
315             var codePath = from element in xelement.Elements("DefaultCodePath") select element;
316             foreach (XElement item in codePath)
317             {
318                 item.Attribute("IsStart").Value = "YES";
319                 item.SetValue(path);
320             }
321             xelement.Save(XMLName);
322         }
323     }
324 }
View Code

 

闲时写的代码,希望对要学linq to xml 的同学有帮助,第一次,有点不知道怎么写, 见量啊

posted @ 2013-11-26 10:27  ant·  阅读(129)  评论(0)    收藏  举报