【Unity 3D】C#从XML中写入、读取、修改数据(附源码)

XML即可标记语言,是一种用于标记电子文件使其具有结构性的标记语言,在计算机中,标记是指计算机能理解的信息符号,通过此种符号,计算机可以从处理包含各种信息的数据,可以用来标记数据、定义数据结构,是一种用户对自己的标记语言进行定义的源语言

1:写入XML数据

写入XML数据,要思考清楚节点的内容,然后把节点一层一层的添加到XML中,要注意它们之间的先后顺序,它们之间的先后顺序就是生成的XML文件的先后顺序,下面实例演示

using System.IO;
using System.Xml;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test_15_5 : MonoBehaviour
{
    void Start()
    {
        CreateXML();
    }

    void CreateXML()
    {
        string path = @"c:\Temp\jsonInfo.xml";
        //创建XML实例对象
        XmlDocument xml = new XmlDocument();
        //创建根节点
        XmlElement root = xml.CreateElement("Data");

        //创建子节点
        XmlElement element = xml.CreateElement("Person");//设置子节点的名字
        element.SetAttribute("id", "1");//设置子节点的属性
        //设置节点内面的内容
        XmlElement elementChild1 = xml.CreateElement("Name");
        elementChild1.InnerText = "张三";
        XmlElement elementChild2 = xml.CreateElement("Grade");
        elementChild2.InnerText = "96";
        //将内容添加到子节点
        element.AppendChild(elementChild1);
        element.AppendChild(elementChild2);
        //将子节点添加到根节点
        root.AppendChild(element);

        //创建子节点
        XmlElement element2 = xml.CreateElement("Person");//设置子节点的名字
        element2.SetAttribute("id", "2");//设置子节点的属性
        //设置节点内面的内容
        XmlElement elementChild3 = xml.CreateElement("Name");
        elementChild3.InnerText = "李四";
        XmlElement elementChild4 = xml.CreateElement("Grade");
        elementChild4.InnerText = "98";
        //将内容添加到子节点
        element2.AppendChild(elementChild3);
        element2.AppendChild(elementChild4);
        //将子节点添加到根节点
        root.AppendChild(element2);

        //将根节点添加到XML实例对象中
        xml.AppendChild(root);
        //最后保存文件
        xml.Save(path);
    }
}

2:读取XML数据

读取XML数据,也是根据节点一层一层的读取数据,如生成的XML文件,最外层是Data,就要先读取Data,然后以Data为根节点读取子节点Person,然后根据子节点Person读取下一层节点的数据。

using System.IO;
using System.Xml;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test_15_6 : MonoBehaviour
{
    void Start()
    {
        ReadXML();
    }

    //读取XML
    void ReadXML()
    {
        //创建xml文档
        XmlDocument xml = new XmlDocument();
        xml.Load(@"c:\Temp\jsonInfo.xml");
        //得到Data节点下的所有子节点
        XmlNodeList xmlNodeList = xml.SelectSingleNode("Data").ChildNodes;
        //遍历所有子节点
        foreach (XmlElement item in xmlNodeList)
        {
            if (item.GetAttribute("id") == "1")
            {
                //继续遍历id为1的节点下的子节点
                foreach (XmlElement itemChild in item.ChildNodes)
                {
                    if (itemChild.Name == "Name")
                    {
                        Debug.Log(itemChild.InnerText);
                    }
                    else if (itemChild.Name == "Grade")
                    {
                        Debug.Log(itemChild.InnerText);
                    }
                }
            }
            if (item.GetAttribute("id") == "2")
            {
                //继续遍历id为2的节点下的子节点
                foreach (XmlElement itemChild in item.ChildNodes)
                {
                    if (itemChild.Name == "Name")
                    {
                        Debug.Log(itemChild.InnerText);
                    }
                    else if (itemChild.Name == "Grade")
                    {
                        Debug.Log(itemChild.InnerText);
                    }
                }
            }
        }
    }
}

3:修改XML数据

修改XML数据也是同样的道理,需要根据节点一层一层的找到数据,然后进行修改,下面的实例演示了如何修改XML数据

using System.IO;
using System.Xml;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test_15_7 : MonoBehaviour
{
    void Start()
    {
        UpdateXML();
    }

    //修改XML
    void UpdateXML()
    {
        string path = @"c:\Temp\jsonInfo.xml";
        if (File.Exists(path))
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(path);
            XmlNodeList xmlNodeList = xml.SelectSingleNode("Data").ChildNodes;
            foreach (XmlElement item in xmlNodeList)
            {
                if (item.GetAttribute("id") == "1")
                {
                    //把Person里id为1的属性改为5
                    item.SetAttribute("id", "5");
                }
                if (item.GetAttribute("id") == "2")
                {
                    foreach (XmlElement itemChild in item.ChildNodes)
                    {
                        if (itemChild.Name == "Name")
                        {
                            itemChild.InnerText = "王五";
                        }
                        else if (itemChild.Name == "Grade")
                        {
                            itemChild.InnerText = "0";
                        }
                    }
                }
            }
            xml.Save(path);
        }
    }
}

编译和执行代码后,xml中对应的内容将会改变

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

showswoller

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

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

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

打赏作者

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

抵扣说明:

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

余额充值