Unity数据持久化 之 Xml入门精要 (从语法入门到序列与反序列化)

        该教程资源来源于唐老狮,仅作学习分享交流

        学习xml是因为看到了uitookit里出现了uxml 所以来学习一下

1.xml结构

2.基础语法

注释与开头固定写法

<!--第1行 注释格式  第2行代表版本和编码格式,是固定写法-->
<?xml version="1.0" encoding="UTF-8"?>

变量与树形结构

        节点需要一对对存在<>和</>是一对 相当于c#中的 { 和 }是一对,这一对就叫做元素,一般对应c#中的字段

<!-- 根节点与其下的数据 -->
<根节点> <子节点1><数据> 123 </数据><数据下的数据>456</数据下的数据></子节点1>
</根节点>

根节点
└── 子节点1
    ├── 数据
    │   └── 123
    └── 数据下的数据
        └── 456

属性 

每个节点可以有其自己的属性,元素也可以改为属性,一般对应c#中的属性

节点名后面+空格 +属性名 = “数据” 

<!-- 根节点与其下的数据 -->
<根节点> <子节点1><数据> 123 </数据><数据下的数据>456</数据下的数据></子节点1>
</根节点>
<!-- 属性-->
<节点1 数据 ="123">数据内容</节点1>

根节点
└── 节点1
    ├── 属性: 数据 = "123"
    └── 内容: 数据内容

可以没有内容,就会变成下面这样

<节点1 数据 ="123"/>

节点1
└── 属性: 数据 = "123" 

注意规则

3.练习翻译

    下面是一个c#的类 那些特性只是提醒给你变量类型的,试试手写将其反序列化为xml吧

[XmlRoot("公司")]
public class 公司
{[XmlElement("公司名称")]public string 公司名称 { get; set; }[XmlElement("员工")]public List<员工> 员工列表 { get; set; }
}public class 员工
{[XmlAttribute("ID")]public int ID { get; set; }[XmlElement("姓名")]public string 姓名 { get; set; }[XmlElement("职位")]public string 职位 { get; set; }
}

    答案

<?xml version="1.0" encoding="UTF-8"?><公司><公司名称>任意名称</公司名称><员工 ID="1" 姓名="张三" 职位="做unity的"/><员工 ID="2" 姓名="李四" 职位="做美术的"/><!-- 非属性来写一个员工的话 --><员工><ID>3</ID><姓名>王五</姓名><职位>做策划的</职位></员工>
</公司>

4.通过代码获取和修改xml
 

using System;
using System.Xml;class Program
{static void Main(){// 加载 XML 文件XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load("example.xml");// 查找要修改的节点XmlNode employeeNode = xmlDoc.SelectSingleNode("/公司/员工[@ID='1']/职位");if (employeeNode != null){// 修改节点的值employeeNode.InnerText = "做策划的";// 保存更改xmlDoc.Save("example.xml");Console.WriteLine("XML 文件已更新。");}else{Console.WriteLine("未找到指定的节点。");}}
}

5.序列化与反序列化

        序列化就是将c#文件转为xml ,xml是有序的 所以叫序列化

比如我有一个Person类 包含两个属性

[Serializable]
public class Person
{public string Name { get; set; }public int Age { get; set; }
}

   用到using System.Xml.Serialization下的XmlSerializer 类

   StreamWriter 和 StreamReader用于文件的读写操作

   你当然可以在unity中用StreamingAsset中的类也是可以的

using System;
using System.IO;
using System.Xml.Serialization;class Program
{static void Main(){// 创建一个对象实例Person person = new Person { Name = "John Doe", Age = 30 };// 创建 XmlSerializer 实例XmlSerializer serializer = new XmlSerializer(typeof(Person));// 序列化对象并写入 XML 文件using (StreamWriter writer = new StreamWriter("person.xml")){serializer.Serialize(writer, person);}Console.WriteLine("对象已序列化到 XML 文件。");}
}

反序列化

using System;
using System.IO;
using System.Xml.Serialization;class Program
{static void Main(){// 创建 XmlSerializer 实例XmlSerializer serializer = new XmlSerializer(typeof(Person));// 从 XML 文件中读取数据并反序列化using (StreamReader reader = new StreamReader("person.xml")){Person person = (Person)serializer.Deserialize(reader);Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5849.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

在 Bash 中获取 Python 模块变量列

在 Bash 中获取 Python 模块的变量列表可以通过使用 python -c 来运行 Python 代码并输出变量名列表。 1、问题背景 在编写 Bash 补全脚本时&#xff0c;需要获取已安装 Python 模块中与模式匹配的所有变量。为了避免解析注释等内容&#xff0c;希望仅使用 Python 相关功能。 …

Xserver v1.4.2发布,支持自动重载 nginx 配置

Xserver——优雅、强大的 php 集成开发环境 本次更新为大家带来了更好的用户体验。 &#x1f389; 下载依赖组件时&#xff0c;显示进度条&#xff0c;展示下载进度。 &#x1f389; 保存站点信息和手动修改 vhost 配置文件之后&#xff0c;自动重载 nginx 配置 &#x1f41e…

记录————封装vue3+element-plus(el-upload)上传图片组件

AI介绍&#xff1a; 显示已上传的图片列表&#xff0c;并提供删除和预览功能。支持上传新的图片&#xff0c;并在上传成功后显示在列表中。 代码的具体步骤如下&#xff1a; 在模板中&#xff0c;使用v-for指令遍历imageUrls数组&#xff0c;显示已上传的图片&#xff0c;并…

ssm060基于SSM的高校共享单车管理系统的设计与实现+vue(论文+源码)_kaic

设计题目&#xff1a;高校共享单车管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0…

FastReport将停止 .NET Framework 上的 WebReport 更新

从2024/ 12 /1 日起&#xff0c;Fastreport将停止发布更新和提供对 FastReport.Web (.NET Framework) 的技术支持。该库一直是使用 Online Designer 的许多项目中报告的核心。这些更改意味着 FastReport.Web (Legacy) 库&#xff08;FastReport.Net包的一部分&#xff09;将不再…

FPGA高速设计之Aurora64B/66B的应用与不足的修正

FPGA高速设计之Aurora64B/66B的应用与不足的修正 Aurora IP协议的特点 首先基于网上找到的一些资料&#xff0c;来讲述下Aurora高速协议的特点与相关的应用。Aurora 协议在 2002 年由 Xilinx 公司首次提出&#xff0c;是由Xilinx提供的一个开源、免费的链路层串行传输通信协议…

【力扣打卡系列】单调栈

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day20 单调栈 题目描述 解题思路 单调栈 后进先出 记录的数据加在最上面丢掉数据也先从最上面开始 单调性 记录t[i]之前会先把所有小于等于t[i]的数据丢掉&#xff0c;不可能出现上面大下面小的…

一个例子来说明Ada语言的实时性支持

Ada是一种专为工程应用和实时系统设计的编程语言&#xff0c;它提供了丰富的特性来确保程序的实时性和可靠性。下面是一个简化的例子&#xff0c;展示了Ada如何用于编写飞机电子控制器的代码&#xff0c;并说明Ada的实时性是如何保证的。 Ada实时性的关键特性&#xff1a; 任务…

C/C++语言基础--C++模板与元编程系列三(变量模板、constexpr、萃取等…………)

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 模板与元编程是C的重要特点&#xff0c;也是难点&#xff0c;本人预计将会更新10期左右进行讲解&#xff0c;这是第三期&#xff0c;讲变量模板、constexpr、萃取等知识&#xff1b;C语言后面也会继续更新知…

基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…

RAG 系统的分块难题:小型语言模型如何找到最佳断点?

之前我们聊过 RAG 里文档分块 (Chunking) 的挑战&#xff0c;也介绍了 迟分 (Late Chunking) 的概念&#xff0c;它可以在向量化的时候减少上下文信息的丢失。今天&#xff0c;我们来聊聊另一个难题&#xff1a;如何找到最佳的分块断点。 虽然迟分对边界位置不敏感&#xff0c;…

服务器作业2

关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 配置文件 创建用户nfs-upload [rootlocalhost ~]# useradd -u 210 nfs-upload [rootlocalhost ~]# groupmod -g 210 nfs-upload 创建tom用户 [rootlocalhost ~]# useradd tom 查看to…

Java爱情交友婚恋系统小程序源码

&#x1f491;【恋爱攻略】交友婚恋系统&#xff0c;遇见对的TA不再难&#xff01;&#x1f496;&#x1f4ab; &#x1f48c; 开篇&#xff1a;数字时代&#xff0c;寻觅真爱的新方式 在这个快节奏的数字时代&#xff0c;寻找真爱似乎成了一件既期待又头疼的事情。&#x1f…

飞牛fnOs内网穿透-使用Lucky实现ipv6动态解析+HTTPS访问NAS服务

&#x1f9ed;Lucky官方介绍 Lucky最初是作为一个小工具&#xff0c;由开发者为自己的个人使用而开发&#xff0c;用于替代socat&#xff0c;在小米路由AX6000官方系统上实现公网IPv6转内网IPv4的功能。Lucky的设计始终致力于让更多的Linux嵌入式设备运行&#xff0c;以实现或…

Java外卖霸王餐CPS优惠CPS平台自主发布小程序系统源码

外卖霸王餐CPS平台系统&#x1f37d;️&#xff1a;省钱吃大餐的新神器 &#x1f389; 引言&#xff1a;霸王餐不再是梦 在这个快节奏的生活中&#xff0c;外卖已经成为了我们日常饮食的重要组成部分。然而&#xff0c;每次点外卖都要精打细算&#xff0c;是否让你感到疲惫&a…

Java项目实战II基于Spring Boot的智慧生活商城系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着科技的飞速发展&#xff0c;人们的…

qt QFile详解

1、概述 QFile类是Qt框架中用于读取和写入文本和二进制文件资源的I/O工具类。它继承自QFileDevice类&#xff0c;后者又继承自QIODevice类。QFile类提供了一个接口&#xff0c;允许开发者以二进制模式或文本模式对文件进行读写操作。默认情况下&#xff0c;QFile假定文件内容为…

电脑软件:推荐一款免费且实用的电脑开关机小工具

目录 一、软件简介 二、软件功能 三、软件特点 四、使用说明 五、软件下载 今天给大家推荐一款免费且实用的电脑开关机小工具KShutdown&#xff0c;有需要的朋友可以下载试一下&#xff01; 一、软件简介 KShutdown是一款精巧且实用的定时自动关机小工具&#xff0c;对于…

初阶数据结构【TOP】- 16. 经典八大排序对比

文章目录 前言一、相关复杂度二、相关稳定性三、表格总结总结 前言 本篇文章笔者将会对排序算法的所有时间复杂度和稳定性进行分析. 一、相关复杂度 ● 简单选择排序 首先,选择排序的效率是不高的 , 时间复杂度考虑的是最坏情况 , 那么对于选择排序来说, 最坏情况下需要进行…

Postman断言与依赖接口测试详解!

在接口测试中&#xff0c;断言是不可或缺的一环。它不仅能够自动判断业务逻辑的正确性&#xff0c;还能确保接口的实际功能实现符合预期。Postman作为一款强大的接口测试工具&#xff0c;不仅支持发送HTTP请求和接收响应&#xff0c;还提供了丰富的断言功能&#xff0c;帮助测试…