unity XML 文件读写添加删除操作

16 篇文章 0 订阅

untiy XMl 文件的读写添加删除操作代码有注释直接贴代码             untiy 学习讨论群 184386599

/// <summary>
    /// 创建XMl文件
    /// </summary>
    /// <param name="path"></param>
    /// <param name="name"></param>
    public void CreateXML(string path, string name)
    {
        string tempPath = path + "//" + name;
        if (!File.Exists(tempPath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            XmlNode header = xmlDoc.CreateProcessingInstruction("xml", "version = '1.0' encoding = 'UTF-8'");
            xmlDoc.AppendChild(header);

            //创建根节点
            XmlElement rootElm = xmlDoc.CreateElement("HeroList");


            创建子节点
            //XmlElement roleInfo = doc.CreateElement("RoleInfo");
            设置节点的属性
            //roleInfo.SetAttribute("id", "1");
            //roleInfo.SetAttribute("name","玩家信息");
            创建子节点下面的元素
            //XmlElement elmSub1 = doc.CreateElement("RoleId");
            //elmSub1.InnerText = "10000";
            //XmlElement elmSub2 = doc.CreateElement("name");
            //elmSub2.InnerText = "zwl";
            //XmlElement elmSub3 = doc.CreateElement("hp");
            //elmSub3.InnerText = "100";

            把节点一层一层的添加至XML中,每一层的顺序很重要
            //roleInfo.AppendChild(elmSub1);
            //roleInfo.AppendChild(elmSub2);
            //roleInfo.AppendChild(elmSub3);
            //rootElm.AppendChild(roleInfo);

            //临时测试数据
            string[] strsIds = { "1", "2" };
            string[] strsnames = { "name1", "name2" };
            string[] strschildNames = { "ffff", "2333" };
            string[] strschildId = { "12222", "22222" };
            string[] strschildhp = { "100", "200" };

            for (int i = 0; i < 2; i++)
            {
                XmlElement roleInfo = xmlDoc.CreateElement("RoleInfo");
                roleInfo.SetAttribute("id", strsIds[i]);
                roleInfo.SetAttribute("name", strsnames[i]);
                XmlElement elmSub1 = xmlDoc.CreateElement("RoleId");
                XmlElement elmSub2 = xmlDoc.CreateElement("name");
                XmlElement elmSub3 = xmlDoc.CreateElement("hp");
                elmSub1.InnerText = strschildId[i];
                elmSub2.InnerText = strschildNames[i];
                elmSub3.InnerText = strschildhp[i];

                //节点添加的顺序一定要准确
                roleInfo.AppendChild(elmSub1);
                roleInfo.AppendChild(elmSub2);
                roleInfo.AppendChild(elmSub3);
                rootElm.AppendChild(roleInfo);
            }
            xmlDoc.AppendChild(rootElm);
            xmlDoc.Save(tempPath);
        }
    }

    /// <summary>
    /// 更新修改XMl文件
    /// </summary>
    /// <param name="path"></param>
    /// <param name="name"></param>
    public void UpdateXml(string path, string name)
    {
        string tempPath = path + "//" + name;
        if (File.Exists(tempPath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            //加载xml
            xmlDoc.Load(tempPath);
            XmlNodeList nodeLists = xmlDoc.SelectSingleNode("HeroList").ChildNodes;
            if (nodeLists == null || nodeLists.Count == 0)
            {
                Debug.Log("当前节点下为null");
            }
            else
            {
                for (int i = 0; i < nodeLists.Count; i++)
                {
                    XmlElement tempElm = nodeLists[i] as XmlElement;
                    if (tempElm.GetAttribute("id") == "1") //获得节点的属性
                    {
                        tempElm.SetAttribute("id", "-1"); //设置节点的属性
                    }
                    XmlNodeList tempNodList = tempElm.ChildNodes; //获得一个节点下的所有子节点
                    for (int j = 0; j < tempNodList.Count; j++)
                    {
                        XmlElement tempElmChild = tempNodList[j] as XmlElement;
                        if (tempElmChild.Name == "RoleId")
                        {
                            tempElmChild.InnerText = "1-2222";
                        }
                    }
                }
            }
            xmlDoc.Save(tempPath);
        }
    }

    /// <summary>
    /// 添加新建节点
    /// </summary>
    /// <param name="path"></param>
    /// <param name="name"></param>
    public void AddXml(string path, string name)
    {
        string tempPath = path + "//" + name;
        if (File.Exists(tempPath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(tempPath);
            //获得跟节点
            XmlNode xmlRoot = xmlDoc.SelectSingleNode("HeroList");
            //其实和创建一样
            //1:创建一个跟节点下的子节点
            XmlElement elmChildMyInfo = xmlDoc.CreateElement("MyInfo");
            elmChildMyInfo.SetAttribute("id", "1");
            elmChildMyInfo.SetAttribute("name", "myinfoeCHild");
            XmlElement elmChild1 = xmlDoc.CreateElement("MP");
            elmChild1.InnerText = "19999";
            elmChildMyInfo.AppendChild(elmChild1);
            //2创建已经存在的子节点下的一个节点
            for (int i=0;i<xmlRoot.ChildNodes.Count;i++)
            {
                XmlElement tempElm = xmlRoot.ChildNodes[i] as XmlElement;
                if (tempElm.GetAttribute("id") == "2")
                {
                    XmlElement elmChildMP= xmlDoc.CreateElement("MP");
                    elmChildMP.InnerText = "19999";
                    tempElm.AppendChild(elmChildMP);
                }
            }
            xmlRoot.AppendChild(elmChildMyInfo);
            xmlDoc.AppendChild(xmlRoot);
            xmlDoc.Save(tempPath);
        }
    }

    /// <summary>
    /// 删除Xml
    /// </summary>
    /// <param name="path"></param>
    /// <param name="name"></param>
    public void DeleteXml(string path, string name)
    {
        string tempPath = path + "//" + name;
        if (File.Exists(tempPath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(tempPath);
            //获得跟节点
            XmlNodeList xmlNodeList = xmlDoc.SelectSingleNode("HeroList").ChildNodes;
            for(int i=0;i<xmlNodeList.Count;i++)
            {
                XmlElement tempElm = xmlNodeList[i] as XmlElement;
                if (tempElm.Name == "MyInfo")
                {
                    tempElm.RemoveAll();
                    tempElm.ParentNode.RemoveChild(tempElm); //这一句会把字段也给删除掉 如果不加的话就会保留字段
                }
                if (tempElm.Name == "RoleInfo" && tempElm.GetAttribute("id") == "1")
                {
                    for (int j=0;j< tempElm.ChildNodes.Count;j++)
                    {
                        XmlElement tempElm_1 = tempElm.ChildNodes[j] as XmlElement;
                        Debug.Log(tempElm_1.Name);
                        if(tempElm_1.Name == "RoleId")
                        {
                            tempElm_1.RemoveAll();
                        }
                    }
                }
            }
            xmlDoc.Save(tempPath);
        }
    }

文件截图

   untiy 学习讨论群 184386599

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值