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

相关文章
|
7天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
27 11
|
8天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
38 10
|
2月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
74 4
|
3月前
|
SQL 缓存 分布式计算
C#如何处理上亿级数据的查询效率
C#如何处理上亿级数据的查询效率
51 1
|
3月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
89 0
|
3月前
|
XML Web App开发 数据格式
HTML 页面显示 XML 数据
10月更文挑战第2天
|
3月前
|
中间件 数据库连接 API
C#数据分表核心代码
C#数据分表核心代码
49 0
|
3月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
128 0
|
3月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
664 0
|
2月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
43 3