C#使用Linq对xml文件进行增删改查

using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
/// <summary>
/// 配置文件修改工具公共方法
/// </summary>
namespace 智慧工地大屏.util
{
    public class ConfigXmlUtil
    {
        private static ILog logger = LogManager.GetLogger(typeof(ConfigXmlUtil));
        // 配置文件相对路径
        public static string configXMLPath = AppDomain.CurrentDomain.BaseDirectory + "Config\\config.xml";

        /// <summary>
        /// 修改配置文件的节点的值
        /// </summary>
        /// <param name="nodeName">节点名称为name的值</param>
        /// <param name="value">要修改的节点的值</param>
        /// <returns></returns>
        public static bool updateNodeValue(string nodeNameValue, string value)
        {
            try
            {
                // 加载配置文件
                XElement xelement = XElement.Load(configXMLPath);
                // 遍历所有key节点
                foreach (XElement element in xelement.Descendants("key"))
                {
                    // 当其中某个key节点的name属性与nodeNameValue相匹配时,则修改这个key节点的值
                    if (nodeNameValue.Equals(element.Attribute("name").Value))
                    {
                        element.SetValue(value);
                    }
                }
                // 修改之后重新保存到配置文件
                xelement.Save(configXMLPath);
                return true;
            }
            catch (Exception ex)
            {
                logger.Error("信息:加载配置文件失败", ex);
                return false;
            }
        }

        /// <summary>
        /// 修改配置文件的节点的属性的值
        /// </summary>
        /// <param name="nodeName">节点名称为name的值</param>
        /// <param name="attributeName">属性名称</param>
        /// <param name="value">要修改的属性的值</param>
        /// <returns></returns>
        public static bool updateAttributeValue(string nodeNameValue, string attributeName,string value)
        {
            try
            {
                // 加载配置文件
                XElement xelement = XElement.Load(configXMLPath);
                // 遍历所有的key节点
                foreach (XElement element in xelement.Descendants("key"))
                {
                    // 当其中某个key节点的name属性的值与nodeNameValue相匹配时,则修改该节点的某个属性以及其值,如果该节点不存在该属性,则会添加
                    if (nodeNameValue.Equals(element.Attribute("name").Value))
                    {
                        element.SetAttributeValue(attributeName,value);
                    }
                }
                // 修改之后需要重新保存配置文件
                xelement.Save(configXMLPath);
                return true;
            }
            catch (Exception ex)
            {
                logger.Error("信息:加载配置文件失败", ex);
                return false;
            }
        }

        /// <summary>
        /// 根据父节点名称,添加指定的子节点
        /// </summary>
        /// <param name="parentNodeNameArr">从顶级节点开始依次向下直到最后一个父节点为止的所有节点名称</param>
        /// <param name="xElementAttribute">子节点数据</param>
        /// xElementAttribute = new XElement("Test", new XAttribute("Name", "Zery"), new XAttribute("Name", "Zery"));
        /// xElementAttribute.SetValue("value");
        /// <returns></returns>
        public static bool addNode(string[] parentNodeNameArr, XElement xElementAttribute)
        {
            try
            {
                XDocument xDoc = XDocument.Load(configXMLPath);
                if (parentNodeNameArr.Length == 1)
                {
                    XElement xElement = xDoc.Element(parentNodeNameArr[0]);
                    xElement.Add(xElementAttribute);
                }
                else if (parentNodeNameArr.Length == 2)
                {
                    XElement xElement = xDoc.Element(parentNodeNameArr[0]).Element(parentNodeNameArr[1]);
                    xElement.Add(xElementAttribute);
                }
                else if (parentNodeNameArr.Length == 3)
                {
                    XElement xElement = xDoc.Element(parentNodeNameArr[0]).Element(parentNodeNameArr[1]).Element(parentNodeNameArr[2]);
                    xElement.Add(xElementAttribute);
                }
                else
                {
                    return false;
                }
                xDoc.Save(configXMLPath);
                return true;
            }
            catch (Exception ex)
            {
                logger.Error("信息:加载配置文件失败", ex);
                return false;
            }
        }

        /// <summary>
        /// 删除第三节所有节点
        /// </summary>
        /// <param name="currentNodeNameArr"></param>
        public static bool deleteNode(string[] currentNodeNameArr)
        {
            try
            {
                XDocument xDoc = XDocument.Load(configXMLPath);
                XElement element = xDoc.Element(currentNodeNameArr[0]).Element(currentNodeNameArr[1]).Element(currentNodeNameArr[2]);
                element.Remove();
                xDoc.Save(configXMLPath);
                return true;
            }
            catch (Exception ex)
            {
                logger.Error("信息:加载配置文件失败", ex);
                return false;
            }
        }

		/// <summary>
        /// 遍历所有“key”节点
        /// </summary>
		public static bool LoadXmlConfigFile()
        {
            bool isLoadSuccess = true;
            //加载系统配置参数
            XElement xelement = XElement.Load(AppDomain.CurrentDomain.BaseDirectory + "Config\\config.xml");
            foreach (XElement element in xelement.Descendants("key"))
            {
            	// 获取name属性值
                string key = element.Attribute("name").Value.Trim();
                string describe = element.Attribute("describe").Value.Trim();
                string value = element.Value.Trim();
                string configLog = "加载:系统参数 Key-Value:[" + key + ":" + value + "] 节点:" + element.ToString();
                try
                {
                    SysContent.tabOneConfigDic.Add(key, value);
                }
                catch (Exception ex)
                {
                    isLoadSuccess = false;
                    logger.Error("信息:加载配置文件失败" + configLog, ex);
                    break;
                }
            }
            return isLoadSuccess;

        }
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哎呦喂O_o嗨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值