Linq To XML
XML 格式:
<?xml version="1.0" encoding="utf-8"?> <Accounts> <Account> <DisplayedName></DisplayedName> <AccountName></AccountName> <SharedKey>=</SharedKey> <IsUseSSL></IsUseSSL> <IsDevelopmentStorage></IsDevelopmentStorage> </Account> <Account> <DisplayedName></DisplayedName> <AccountName></AccountName> <SharedKey>=</SharedKey> <IsUseSSL></IsUseSSL> <IsDevelopmentStorage></IsDevelopmentStorage> </Account> </Accounts>
读写方法:
public class Account { #region 成员 static string XmlPath = @"data\Accounts.xml"; static Security sc = new Security(); #endregion #region 属性 public string DisplayedName { get; set; } public string AccountName { get; set; } public string SharedKey { get; set; } public bool IsUseSSL { get; set; } public bool IsDevelopmentStorage { get; set; } #endregion #region 方法 /// <summary> /// 创建XML /// </summary> public void CreateFile() { try { if (!File.Exists(XmlPath)) { //定义一个XDocument结构 XDocument myXDoc = new XDocument(new XElement("Accounts")); //保存此结构 myXDoc.Save(XmlPath); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } /// <summary> /// 添加节点 /// </summary> public static bool AddAccountNode(Account account) { try { account.CreateFile(); //定义并从xml文件中加载节点(根节点) XElement rootNode = XElement.Load(XmlPath); //定义一个新节点 XElement newNode = new XElement("Account", new XElement("DisplayedName", account.DisplayedName), new XElement("AccountName", account.AccountName), new XElement("SharedKey", account.SharedKey), new XElement("IsUseSSL", account.IsUseSSL), new XElement("IsDevelopmentStorage", account.IsDevelopmentStorage)); //将此新节点添加到根节点下 rootNode.Add(newNode); //保存对xml的更改操作 rootNode.Save(XmlPath); return true; } catch (Exception ex) { MessageBox.Show(ex.Message); return false; } } /// <summary> /// 删除节点 /// </summary> public static bool DeleteAccountNode(Account account) { try { //定义并从xml文件中加载节点(根节点) XElement rootNode = XElement.Load(XmlPath); IEnumerable<XElement> targetNodes = from target in rootNode.Descendants("Account") where target.Element("DisplayedName").Value == account.DisplayedName && target.Element("AccountName").Value == account.AccountName select target; //将获得的节点集合中的每一个节点依次从它相应的父节点中删除 targetNodes.Remove(); //保存对xml的更改操作 rootNode.Save(XmlPath); return true; } catch (Exception ex) { MessageBox.Show(ex.Message); return false; } } /// <summary> /// 修改节点 /// </summary> public static bool ModifyAccountNode(Account oldAccount, Account newAccount) { try { XDocument myXDoc = XDocument.Load(XmlPath); var query = myXDoc.Element("Accounts").Elements("Account").Where(a => a.Element("DisplayedName").Value == oldAccount.DisplayedName && a.Element("AccountName").Value == oldAccount.AccountName).ToList(); if (query == null) { MessageBox.Show("User information does not exist, please try again later. "); return false; } foreach (var q in query) { q.Element("DisplayedName").Value = newAccount.DisplayedName.ToString(); q.Element("AccountName").Value = newAccount.AccountName.ToString(); q.Element("SharedKey").Value = newAccount.SharedKey.ToString(); q.Element("IsUseSSL").Value = newAccount.IsUseSSL.ToString(); q.Element("IsDevelopmentStorage").Value = newAccount.IsDevelopmentStorage.ToString(); } myXDoc.Save(XmlPath); return true; } catch (Exception ex) { Console.WriteLine(ex.ToString()); return false; } } /// <summary> /// 获取节点 /// </summary> public static List<Account> GetAccountNodes() { List<Account> accounts = new List<Account>(); try { XDocument myXDoc = XDocument.Load(XmlPath); XElement rootNode = myXDoc.Element("Accounts"); foreach (XElement node in rootNode.Elements("Account")) { Account ac = new Account() { DisplayedName = node.Element("DisplayedName").Value, AccountName = node.Element("AccountName").Value, SharedKey =sc.Decrypt(node.Element("SharedKey").Value), IsDevelopmentStorage = Convert.ToBoolean(node.Element("IsDevelopmentStorage").Value), IsUseSSL = Convert.ToBoolean(node.Element("IsUseSSL").Value), }; accounts.Add(ac); } return accounts; } catch { return null; } } #endregion }