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 }
闲时写的代码,希望对要学linq to xml 的同学有帮助,第一次,有点不知道怎么写, 见量啊
浙公网安备 33010602011771号