更新XML的属性值和元素值

本文介绍了一种使用C#和XML第三方库更新XML文件中特定元素属性的方法。通过解析XML文件,利用XPath定位到指定节点,并修改其属性值,最后保存回文件。适用于需要批量更新XML配置文件的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:
1.有时候配置软件的全局设置项时,需要用到键值对的存储方式。
2.配置信息不多的情况下.数据库太重量级,文本文件对utf8编码又不好,即中文内容,这时候XML文件是最佳选择。

要求:
1.使用第3方库或windows SDK,更新某元素的属性值和元素值。
2.提供函数或方法.修改属性值和元素值。如:
  1. <xml>
  2. <selectwindow>It is a select object window</selectwindow>
  3. <toolbarwindow name="toolbar" width="200">
  4. It is a toolbar.
  5.   <rect x="4" y="5"/>
  6. </toolbarwindow >
复制代码

1.实现函数 UpdateElementValue(const char* key,const char* value);
-- key的格式,更新toolbarwindow 属性name值时,可使用xpath格式,传入参数:toolbarwindow@name和值"goodbye"
-- 更新rect的属性值x时,key: "toolbarwindow:rect@x" value: "100"


 

using System;
using System.Xml;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xmlPath = "E:\\XMLFile1.xml";
            Console.WriteLine("input the key:");
            string key = Console.ReadLine();
            Console.WriteLine("input the value:");
            string val = Console.ReadLine();
            string[] str = key.Split(':');
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlPath);
            if (str.Length > 1)
            {
                string[] r = str[1].ToString().Split('@');
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(str[0].ToString()).ChildNodes;
                foreach (XmlNode xn in nodeList)
                {
                    if (xn.LocalName.ToString() == r[0].ToString())
                    {
                        XmlElement xe = (XmlElement)xn;
                        if (xe.GetAttribute(r[1].ToString()).ToString() != "")
                        {
                            xe.SetAttribute(r[1].ToString(), val);
                        }
                    }
                }
                xmlDoc.Save(xmlPath);
            }
            else
            {
                string[] r = key.Split('@');
                XmlNode xn = xmlDoc.SelectSingleNode(r[0].ToString());
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute(r[1].ToString())!="")
                {
                    xe.SetAttribute(r[1].ToString(), val);
                }
                xmlDoc.Save(xmlPath);
            }
        }
    }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值