四川住房建设部官方网站,长宁网站建设,帝国网站地图模板,如何让网站自适应#x1f468;#x1f4bb;个人主页#xff1a;元宇宙-秩沅
#x1f468;#x1f4bb; hallo 欢迎 点赞#x1f44d; 收藏⭐ 留言#x1f4dd; 加关注✅!
#x1f468;#x1f4bb; 本文由 秩沅 原创
#x1f468;#x1f4bb; 收录于专栏#xff1a;Uni… 个人主页元宇宙-秩沅
hallo 欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 秩沅 原创
收录于专栏Unity基础实战
⭐️⭐ 文章目录 ⭐️⭐⭐前言⭐XML是什么和游戏存储的关系 A XML文件格式 B XML基本规则C XML属性D 读取XML文件c#E 读取XML文件中的信息c#F 存储XML文件中的信息c#G 修改XML文件中的信息c#s XML 练习XML编写练习读取练习存取练习 ⭐️⭐ ⭐前言⭐
XML是什么 XMLExtensible Markup Language是一种类似于 HTML但是没有使用预定义标记的语言。因此可以根据自己的设计需求定义专属的标记。这是一种强大将数据存储在一个可以存储、搜索和共享的格式中的方法。最重要的是因为 XML 的基本格式是标准化的如果你在本地或互联网上跨系统或平台共享或传输 XML由于标准化的 XML 语法接收者仍然可以解析数据。 全称可拓展标记语言extentsible markup languageXML是国际通用的它是被设计用来传输和存储数据的一种文本特殊格式
和游戏存储的关系
游戏数据按照XML的格式标准——存储在XML文档中再将XML文档存储在硬盘上或者传输给远端——达到数据持久化 一种存储和传输数据的选择 一种配置数据的方法 A XML文件格式 特点: 是一种树形结构 注释的格式——!–在这里写注释–
_________
固定的格式——?xml version “1.0” encoding “UTF-8” UTF - 8是什么意思 和ASCII码一样它也是一种编码格式只不过ASCII码是最原始的编码格式 世界上存在着多种编码方式同一个二进制数字可以被解释成不同的符号。因此要想打开一个文本文件就必须知道它的编码方式否则用错误的编码方式解读就会出现乱码.电子邮件常常出现乱码就是因为发信人和收信人使用的编码方式不一样。 ASCIIUnicode和UTF-8终于找到一个能完全搞清楚的文章了 B XML基本规则 符号含义lt — 小于gt — 大于amp — 和apos — ’单引号quot — 引号
注意
1.每个元素都必须有关闭标签 2.元素命名规则基本遵照C#中变量名命名规则 3.XML标签要注意大小写 4.XML文档必须有根元素 C XML属性 属性的特点
属性就是在元素标签后面空格 添加的内容 注意: 属性必须用引号包裹 单引号双引号都可以 属性写法 元素节点 ————————————— 属性作用都一样 格式验证方法
菜鸟教程XML 格式验证器
练习
当出现没有变量名的数据时 就用变量类型名命名 D 读取XML文件c# Xml文件存放位置 1.只读不写的XML文件可以放在 Resources或者StreamingAssets 文件夹下 2.动态存储的XML文件放在 Application.persistentDataPath 路径下 C#读取XML的方法有3种 1.XmlDocument (把数据加载到内存中使用XmlDocument类读取是较方便最容易理解和操作的方法)2.XmlTextReader (以流形式加载内存占用更少但是是单向只读使用不是特别方便除非有特殊需求否则不会使用)3.Linq XmlDocument XmlDocument xml new XmlDocument();
1.xml文件名加载——存放在Resorces文件夹下的xml文件加载处理 //为TextAsset Resorces文件夹下的文本类TextAsset asset Resources.LoadTextAsset(xml文件名);print(asset.text);//加载为xml对象xml.LoadXml(asset.text);2.通过xml文件的路径加载——存放在StreamingAssets 文件夹下的xml文件加载处理
xml.Load(Application.streamingAssetsPath /xml文件名.xml);
//streamingAssetsPath 文件夹只读移动端pc可读可写注意 为什么不读Resource文件夹的路径因为打包后它被压缩了读不到 E 读取XML文件中的信息c# XmlDocument xml new XmlDocument();
1.相关类
XmlNode 单个节点信息类XmlNodeList 多个节点信息类 XmlDocument 用于创建节点 存储文件XmlDeclaration 用于添加版本信息XmlElement 节点类
2.获取xml当中的根节点
XmlNode root xml.SelectSingleNode(“根节点名”);
3.获取下面的子节点
XmlNode nodeName root.SelectSingleNode(“name”);
4.获取节点包裹的元素信息
nodeName.InnerText
5.获取节点属性信息
XmlNode nodeItem root.SelectSingleNode(“Item”);①nodeItem.Attributes[“属性名”].Value②nodeItem.Attributes.GetNamedItem(“属性名”).Value
6.获取 一个节点下的同名节点的方法 为什么会有同名 因为当出现没有变量名的数据时 就用变量类型名命名 XmlNode nodeListInt root.SelectSingleNode(“ListInt”);XmlNodeList intList nodeListInt.SelectNodes(“int”);
7.得到之后遍历
迭代器遍历 foreach (XmlNode node in intList )for循环遍历 for (int i 0; i intList .Count; i)
8.得到子节点的子节点
写法一 XmlNode node Xml.SelectSingleNode(“Root”).SelectSingleNode(“name”);写法二 XmlNode node Xml.SelectSingleNode(“Root/name”); F 存储XML文件中的信息c# 特殊文件夹读写性回顾
1.Resources 可读 不可写 打包后找不到 2.Application.streamingAssetsPath 可读 PC端可写 找得到 3.Application.dataPath 打包后找不到 4.Application.persistentDataPath 可读可写找得到
存储xml文件 在Unity中一定是使用各平台都可读可写可找到的路径 1.相关类
XmlNode 单个节点信息类XmlNodeList 多个节点信息类 XmlDocument 用于创建节点 存储文件XmlDeclaration 用于添加版本信息XmlElement 节点类 通过代码API创建XML信息不需要手动编写的流程 0.及记录存储文件夹信息的路径 string path Application.persistentDataPath /要创建的文件夹名.xml; 1.创建文本对象 XmlDocument xml new XmlDocument();2.添加固定版本信息
//相当于就是创建?xml version1.0 encodingUTF-8?这句XmlDeclaration xmlDec xml.CreateXmlDeclaration(1.0, UTF-8, );//创建完成过后 要添加进入 文本对象中xml.AppendChild(xmlDec);3. 添加根节点 XmlElement root xml.CreateElement(Root);xml.AppendChild(root);
4.为根节点添加子节点 XmlElement name xml.CreateElement(name);name.InnerText 孙悟空;root.AppendChild(name);XmlElement age xml.CreateElement(age);atk.InnerText 10;root.AppendChild(age);XmlElement listInt xml.CreateElement(listInt);//子节点里面加子节点组for (int i 1; i 3; i){XmlElement childNode xml.CreateElement(int);childNode.InnerText i.ToString();listInt.AppendChild(childNode);}root.AppendChild(listInt);
5.添加属性 XmlElement itemList xml.CreateElement(itemList);for (int i 1; i 3; i){XmlElement childNode xml.CreateElement(Item);//添加属性childNode.SetAttribute(id, i.ToString());childNode.SetAttribute(num, (i * 10).ToString());itemList.AppendChild(childNode);}root.AppendChild(itemList);6.保存 xml.Save(path);G 修改XML文件中的信息c# 1.相关类
XmlNode 单个节点信息类XmlNodeList 多个节点信息类 XmlDocument 用于创建节点 存储文件XmlDeclaration 用于添加版本信息XmlElement 节点类
string path Application.persistentDataPath “/要创建的文件夹名.xml”; 1.判断是否存在文件
File.Exists(path)
2.加载XML文件API
newXml.Load(path);
【newXml - XmlDocument类】
3.创建节点
newXml.CreateElement(“节点名字”);
5.增加子节点
root.AppendChild(node)
6.移除子节点
root.RemoveChild(node); 【root - XmlElemen节点类】 if( File.Exists(path) ){//加载 newXml.Load(path);//移除XmlNode node;node newXml.SelectSingleNode(Root/atk);//得到父节点XmlNode root2 newXml.SelectSingleNode(Root);//移除子节点root2.RemoveChild(node);//添加节点XmlElement speed newXml.CreateElement(moveSpeed);speed.InnerText 20;root2.AppendChild(speed);//记得存newXml.Save(path);}s XML 练习 XML编写练习
当出现没有变量名的数据时 就用变量类型名命名
读取练习
//将一个和PlayerInfo相同信息的XML文件的值读取出来赋给另一个对象
public class Item
{public int id;public int num;
}public class PlayerInfo
{public string name;public int atk;public int def;public float moveSpeed;public float roundSpeed;public Item weapon;public Listint listInt;public ListItem itemList;public Dictionaryint, Item itemDic;public void LoadData(string fileName){//加载XML文件信息XmlDocument xml new XmlDocument();//加载xml.Load(Application.streamingAssetsPath / fileName .xml);//从文件中加载出具体的数据//加载根节点 才能加载后面的内容XmlNode playerInfo xml.SelectSingleNode(PlayerInfo);//通过根节点 去加载具体的信息this.name playerInfo.SelectSingleNode(name).InnerText;this.atk int.Parse(playerInfo.SelectSingleNode(atk).InnerText);this.def int.Parse(playerInfo.SelectSingleNode(def).InnerText);this.moveSpeed float.Parse(playerInfo.SelectSingleNode(moveSpeed).InnerText);this.roundSpeed float.Parse(playerInfo.SelectSingleNode(roundSpeed).InnerText);XmlNode weaponNode playerInfo.SelectSingleNode(weapon);this.weapon new Item();this.weapon.id int.Parse(weaponNode.SelectSingleNode(id).InnerText);this.weapon.num int.Parse(weaponNode.SelectSingleNode(num).InnerText);XmlNode listIntNode playerInfo.SelectSingleNode(listInt);XmlNodeList intList listIntNode.SelectNodes(int);this.listInt new Listint();for (int i 0; i intList.Count; i){this.listInt.Add(int.Parse(intList[i].InnerText));}XmlNode itemList playerInfo.SelectSingleNode(itemList);XmlNodeList items itemList.SelectNodes(Item);this.itemList new ListItem();foreach (XmlNode item in items){Item item2 new Item();item2.id int.Parse(item.Attributes[id].Value);item2.num int.Parse(item.Attributes[num].Value);this.itemList.Add(item2);}XmlNode itemDic playerInfo.SelectSingleNode(itemDic);XmlNodeList keyInt itemDic.SelectNodes(int);XmlNodeList valueItem itemDic.SelectNodes(Item);this.itemDic new Dictionaryint, Item();for (int i 0; i keyInt.Count; i){int key int.Parse(keyInt[i].InnerText);Item value new Item();value.id int.Parse(valueItem[i].Attributes[id].Value);value.num int.Parse(valueItem[i].Attributes[num].Value);this.itemDic.Add(key, value);}}
}
存取练习
//封装一个将信息存到一个XML文件中的方法public void SaveData(string fileName){//决定存储路径string path Application.persistentDataPath / fileName .xml;Debug.Log(Application.persistentDataPath);//5个步骤//1.创建我们的Xml文本 XmlDocument xml new XmlDocument();//2.添加固定内容XmlDeclaration xmlDec xml.CreateXmlDeclaration(1.0, UTF-8, );xml.AppendChild(xmlDec);//3.添加根节点XmlElement playerInfo xml.CreateElement(PlayerInfo);xml.AppendChild(playerInfo);//4.添加子节点 或者 属性相关XmlElement name xml.CreateElement(name);name.InnerText this.name;playerInfo.AppendChild(name);XmlElement atk xml.CreateElement(atk);atk.InnerText this.atk.ToString();playerInfo.AppendChild(atk);XmlElement def xml.CreateElement(def);def.InnerText this.def.ToString();playerInfo.AppendChild(def);XmlElement moveSpeed xml.CreateElement(moveSpeed);moveSpeed.InnerText this.moveSpeed.ToString();playerInfo.AppendChild(moveSpeed);XmlElement roundSpeed xml.CreateElement(roundSpeed);roundSpeed.InnerText this.roundSpeed.ToString();playerInfo.AppendChild(roundSpeed);//weaponXmlElement weapon xml.CreateElement(weapon);XmlElement id xml.CreateElement(id);id.InnerText this.weapon.id.ToString();weapon.AppendChild(id);XmlElement num xml.CreateElement(num);num.InnerText this.weapon.num.ToString();weapon.AppendChild(num);playerInfo.AppendChild(weapon);//listIntXmlElement listInt xml.CreateElement(listInt);for (int i 0; i this.listInt.Count; i){XmlElement intNode xml.CreateElement(int);intNode.InnerText this.listInt[i].ToString();listInt.AppendChild(intNode);}playerInfo.AppendChild(listInt);//itemListXmlElement itemList xml.CreateElement(itemList);for (int i 0; i this.itemList.Count; i){XmlElement itemNode xml.CreateElement(Item);itemNode.SetAttribute(id, this.itemList[i].id.ToString());itemNode.SetAttribute(num, this.itemList[i].num.ToString());itemList.AppendChild(itemNode);}playerInfo.AppendChild(itemList);//itemDicXmlElement itemDic xml.CreateElement(itemDic);foreach (int key in this.itemDic.Keys){//keyXmlElement intNode xml.CreateElement(int);intNode.InnerText key.ToString();itemDic.AppendChild(intNode);//valueXmlElement itemNode xml.CreateElement(Item);itemNode.SetAttribute(id, this.itemDic[key].id.ToString());itemNode.SetAttribute(num, this.itemDic[key].num.ToString());itemDic.AppendChild(itemNode);}playerInfo.AppendChild(itemDic);//5.存储xml.Save(path);}⭐️⭐ ⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习 你们的点赞 收藏⭐ 留言 关注✅是我持续创作输出优质内容的最大动力、