C# 关于XML的简单操作实例

本文介绍如何使用ASP.NET进行XML文件的基本操作,包括读取、添加、修改和删除节点,并提供了具体实现方法。

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

这个例子是基本我个人应用的实例。

背景:有个xml文件需要在管理模块实现维护(增删改)|asp.net|web系统

维护页面是个GridView形式的。

1、以下是XML文件样例

<?xml version="1.0" encoding="utf-8"?>
<earth>
  <number id="1">
    <name>北京</name>
    <Longitude>116.392129</Longitude>
    <Latitude>39.90071</Latitude>
    <templateid></templateid>
  </number>
  <number id="2">
    <name>上海</name>
    <Longitude>121.436573</Longitude>
    <Latitude>31.183314</Latitude>
    <templateid></templateid>
  </number>
</earth>

 

2、读取XML文件返回DataTable类型的方法

/// <summary>
        /// 读取XML文件
        /// </summary>
        /// <returns></returns>
        protected DataTable GetDt()
        {
            XmlDocument myDocument = new XmlDocument();
            myDocument.Load(Server.MapPath("~/index/city.xml"));//XML文件在项目的某个目录里

            using (XmlNodeReader reader = new XmlNodeReader(myDocument))
            {
                DataSet dataSetXml = new DataSet();
                dataSetXml.ReadXml(reader);
                DataTable dataTableXml = dataSetXml.Tables[0];
                return dataTableXml;
            }
        }

说明:返回以后绑定到GridView中,需要注意的是,这个方法默认获取到的列是XML文件样例中number标签的"id"属性、name、Longitude、Latitude、templateid里的文本内容。

3、向XML文件添加节点保存的方法

/// <summary>
        /// 添加节点
        /// </summary>
        protected void Add()
        {
            int id = int.Parse(hf.Value) + 1;//hf是记录xml文件中当前number的最大id的,新添一个节点id就要加1
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(Server.MapPath("~/index/city.xml"));
            XmlNode root = xmlDoc.SelectSingleNode("earth");//查找<earth>
            XmlElement xe1 = xmlDoc.CreateElement("number");//创建一个<number>节点
            xe1.SetAttribute("id", id.ToString());//设置该节点id属性
            XmlElement xesub1 = xmlDoc.CreateElement("name");
            xesub1.InnerText = txt_name.Text;//设置文本节点
            xe1.AppendChild(xesub1);//添加到<number>节点中
            XmlElement xesub2 = xmlDoc.CreateElement("Longitude");
            xesub2.InnerText = txt_Longitude.Text;
            xe1.AppendChild(xesub2);
            XmlElement xesub3 = xmlDoc.CreateElement("Latitude");
            xesub3.InnerText = txt_Latitude.Text;
            xe1.AppendChild(xesub3);
            XmlElement xesub4 = xmlDoc.CreateElement("templateid");
            xesub4.InnerText = "";
            xe1.AppendChild(xesub4);
            root.AppendChild(xe1);//添加到<earth>节点中
            xmlDoc.Save(Server.MapPath("~/index/city.xml"));//保存到xml文件中
        }

说明:需要说明一点,当前创建的xml文件可能不允许读写操作,这时就要设置权限,可以给xml文件所在的文件夹加Everone权限,或者在文件夹右键-属性-常规,把只读前的小对勾去掉-确定。

4、修改XML文件中节点的方法

/// <summary>
        /// 修改节点
        /// </summary>
        protected void Mod()
        {
            string id = hfid.Value;//一个常量保存了number标签的id属性

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(Server.MapPath("~/index/city.xml"));
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("earth").ChildNodes;
            foreach (XmlNode xn in nodeList)//遍历所有子节点
            {
                XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                if (xe.GetAttribute("id") == id)//如果id属性值
                {
                    XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
                    foreach (XmlNode xn1 in nls)//遍历
                    {
                        XmlElement xe2 = (XmlElement)xn1;//转换类型
                        if (xe2.Name == "name")//如果找到
                        {
                            xe2.InnerText =txt_name.Text;
                            continue;
                        }
                        if (xe2.Name == "Longitude")
                        {
                            xe2.InnerText =txt_Longitude.Text;
                            continue;
                        }
                        if (xe2.Name == "Latitude")
                        {
                            xe2.InnerText =txt_Latitude.Text;
                            break;//要修改的属性修改完则退出
                        }
                    }
                    break;
                }
            }
            xmlDoc.Save(Server.MapPath("~/index/city.xml"));
        }

说明:我在这里是通过number节点的id属性来唯一标示节点的,这个无所谓,可以举一反三的,只要能找到节点即可修改之,这只是个简单例子,可以根据实际情况变换。

5、删除XML文件中的节点方法

        /// <summary>
        /// 删除节点
     /// </summary>
        /// <param name="name">节点名称</param>
        protected void Del(string name)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(Server.MapPath("~/index/city.xml"));
            XmlNodeList xnl = xmlDoc.SelectNodes("earth/number");
            foreach (XmlNode xn in xnl)
            {
                XmlElement xe = (XmlElement)xn.SelectSingleNode("name");
                if (xe != null && xe.InnerText == name)
                {
                    xn.ParentNode.RemoveChild(xn);//删除name节点所在父节点即整个number节点
                }
            }
            xmlDoc.Save(Server.MapPath("~/index/city.xml"));
        }

说明:在这里需要传值,是一个子节点name的文本内容,根据它确定它所在的number父节点,然后将这个number父节点删除。暂时没想到别的更好的方法,如果你有更好的方法,欢迎回帖交流。

好了,暂时到这。简单的例子,欢迎深入交流。

转载于:https://www.cnblogs.com/smilences/archive/2012/06/27/XML%e6%96%87%e4%bb%b6%e6%93%8d%e4%bd%9cxml%e6%96%87%e4%bb%b6xml%e6%96%87%e4%bb%b6%e8%af%bb%e5%86%99.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值