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 @   静艳  阅读(272)  评论(0编辑  收藏  举报
编辑推荐:
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
阅读排行:
· JDK 24 发布,新特性解读!
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· SQL Server如何跟踪自动统计信息更新?
· windows下测试TCP/UDP端口连通性
点击右上角即可分享
微信分享提示