C#读、写、修改xml文件

有些时候我们需要将一些常用的参数写到配置文件中以便读取,常用的配置文件有json、ini、xml等等,今天我们一起看一下xml的操作:

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Configure>
  <First>
    <SqlServerInstanceName>
    </SqlServerInstanceName>
    <SqlServerDataBaseName>qweqweqwe.mdb</SqlServerDataBaseName>
    <DataBasePath>C:\Test</DataBasePath>
    <InstrumentPath>C:\Test\eeee</InstrumentPath>
    <IpAndPort>
    </IpAndPort>
    <ComPort>
    </ComPort>
    <BaudRate>
    </BaudRate>
  </First> 
</Configure>

读取方法封装:

#region 读取xml获取指定节点所有内容
        /// <summary>
        /// 获取指定节点所有内容
        /// </summary>
        /// <param name="path">文件位置</param>
        /// <param name="TwoNode">二级父节点名称</param>
        /// <param name="ThreeNode">三级节点名称</param>
        /// <returns></returns>
        public (bool, XmlNode,string) ReadXMLNode(string Filepath, string Node)
        {
            string portName = string.Empty;
            try
            {
                XmlDocument xml = new XmlDocument();
                //打开一个xml
                xml.Load(Filepath);
                //选择匹配 XPath 表达式的第一个 XmlNode
                XmlNode Configure = xml.SelectSingleNode(Node); 
                return (true, Configure,"");
            }
            catch (Exception ex)
            { 
                return (false, null,ex.Message);
            }

        }
        #endregion
         
        #region 读取XML配置信息获取指定节点内容
        /// <summary>
        /// 读取XML配置信息获取指定节点内容
        /// </summary>
        /// <param name="path">文件位置</param>
        /// <param name="TwoNode">二级父节点名称</param>
        /// <param name="ThreeNode">三级节点名称</param>
        /// <returns></returns>
        public (bool,string) ReadXMLNodeContent(string Filepath, string Node)
        {
            string portName = string.Empty;
            try
            {
                XmlDocument xml = new XmlDocument();
                //打开一个xml

                xml.Load(Filepath);
                //选择匹配 XPath 表达式的第一个 XmlNode
                XmlNode Configure = xml.SelectSingleNode(Node);
                //读取节点数据
                if (Configure != null)
                {
                    portName = Configure.InnerXml; 
                }
                return (true, portName);
            }
            catch (Exception ex)
            {
                portName = ex.Message;
                return (false, portName);
            }

        }
        #endregion

调用读取的方法

private bool ReadLocalSetUpFile()
        {
            var (result, value, msg) = ReadXMLNode($@"D:\settings.xml", $"Configure/First");//在这里指定文件  指定节点
            if (result)
            {
                XmlNode node = value;
                if (node != null)
                {
                    foreach (XmlNode item in node.ChildNodes)
                    {
                        switch (item.Name)
                        {
                            case "SqlServerInstanceName": InstanceName_text.Text = item.InnerText; break;
                            case "SqlServerDataBaseName": DataBaseName_text.Text = item.InnerText; break;
                            case "DataBasePath": DatabasePath_text.Text = item.InnerText; break;
                            case "InstrumentPath": InstrumentPath_text.Text = item.InnerText; break;
                            case "IpAndPort": IpAndPort_text.Text = item.InnerText; break;
                            case "ComPort": ComPort_text.Text = item.InnerText; break;
                            case "BaudRate": BaudRate_text.Text = item.InnerText; break; 
                        }
                    }
                }
                return true;
            }
            else { 
                MessageBox.Show("加载配置信息失败:" + msg);
                return false;
            }
        }

public string ReadContent(){

 var (Result,Content)=ReadXMLNodeContent($@"D:\settings.xml", $"Configure/First/SqlServerInstanceName");
}

修改xml文件

private (bool, string) SaveXmlSetUp(string NodeName, string SetUpJson)
        {
            if (string.IsNullOrWhiteSpace(SetUpJson)) return (false, "值不能为空");

            try
            {
                string FilePath = $@"D:\settings.xml";
                XmlDocument xmlDoc = new XmlDocument();
                if (File.Exists(FilePath))
                {//判断文件是否存在   存在则修改
                    xmlDoc.Load(FilePath);
					
					//读取二级节点   如果不存在则新增二级节点
                    XmlNode 二级 = xmlDoc.SelectSingleNode($"Configure/{NodeName}");
                    if (二级 == null)
                    {
                        XmlNode memberlist = xmlDoc.SelectSingleNode($"Configure");
                        XmlElement lq = xmlDoc.CreateElement(NodeName);
                        memberlist.AppendChild(lq);
                    }

                    //读取节点数据
                    if (二级 != null)
                    {//将二级节点的数据删掉  重新把节点数据添加进去
                        //二级.RemoveAll();//也可以直接把二级节点的所有数据全部删掉   这里只删除部分节点
                        XmlNode node = xmlDoc.SelectSingleNode($"Configure/{NodeName}/CheckItemSetUp");
                        if (node!=null) 二级.RemoveChild(node);
                    }
					//创建三级节点  为三级赋值
                    XmlElement el1 = xmlDoc.CreateElement("CheckItemSetUp");
                    el1.InnerText = SetUpJson; 
					
					//将三级节点添加到二级节点下
                    XmlNode 二级节点 = xmlDoc.SelectSingleNode($"Configure/{NodeName}");
                    二级节点.AppendChild(el1); 
					//保存
                    xmlDoc.Save(FilePath);
                }
                else
                {//如果xml文件不存在则创建xml文件
                    //加入XML的声明段落,Save方法不再xml上写出独立属性
                    xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null));
                    //加入根元素 
                    XmlElement root = xmlDoc.CreateElement("Configure");
                    xmlDoc.AppendChild(root);
					
					//创建二级节点
                    XmlElement memberlist = xmlDoc.CreateElement($"{NodeName}");
					
					//创建三级节点
                    XmlElement el1 = xmlDoc.CreateElement("SqlServerInstanceName");
                    el1.InnerText = SetUpJson;
					
					//将三级节点添加到二级节点下
                    memberlist.AppendChild(el1);

                    root.AppendChild(memberlist);
                    xmlDoc.Save(FilePath);
                }

                return(true,"");
            }
            catch (Exception ex)
            {
                return (false, ex.Message);
            } 
        }
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

香煎三文鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值