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
    }

 

 

posted @ 2013-01-04 16:04  静艳  阅读(272)  评论(0编辑  收藏  举报