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

简介: 【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中对应的内容将会改变

相关文章
|
15天前
|
物联网 数据处理 C#
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据。在自动化、物联网以及工业控制行业中,上位机开发是一项重要的技能。本教程主要介绍使用C#进行上位机开发,重点在于串口通信和数据处理。
197 82
|
11天前
|
缓存 图形学
Unity C#for和foreach效率比较
该代码对比了三种遍历 `List<int>` 的方式的性能:使用缓存 `Count` 的 `for` 循环、每次访问 `list.Count` 的 `for` 循环以及 `foreach` 循环。通过 `Stopwatch` 测量每次遍历 300 万个元素所花费的时间,并输出结果。测试可在 Unity 环境中运行,按下空格键触发。结果显示,缓存 `Count` 的 `for` 循环性能最优,`foreach` 次之,而每次都访问 `list.Count` 的 `for` 循环最慢。
|
2月前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
38 11
|
2月前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
55 10
|
3月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
124 4
|
4月前
|
SQL 缓存 分布式计算
C#如何处理上亿级数据的查询效率
C#如何处理上亿级数据的查询效率
79 1
|
4月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
107 0
|
4月前
|
XML Web App开发 数据格式
HTML 页面显示 XML 数据
10月更文挑战第2天
|
4月前
|
中间件 数据库连接 API
C#数据分表核心代码
C#数据分表核心代码
62 0
|
4月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
200 0