目录
什么是xml文件?xml文件的结构如何读写xml文件什么是xml文件?
xml文件是一种可拓展标记语言,由于简单易用,常被应用程序用于保存数据,unity也是如此,在我们需要控制读写用户的存档时,除了unity自带的PlayerPrefs或者是json,最常用到的就是xml文件,本篇 文章详细介绍unity(c#)中如何操控xml文件
xml文件的结构
先来看看一个完整的xml文件长什么样
<?xml version="1.0" encoding="UTF-8"?><student><student1 name="椎名"><age>5</age><sex>man</sex></student1><student2 name="mikan"><age>10</age><sex>woman</sex></student2><student3 name="みかん"><age>15</age><sex>woman</sex></student3></student>
一、文档声明:从文档可见,第一行的"<?xml version="1.0" encoding="UTF-8"?>"为xml文件的声明,意思是文档符合xml1.0规范,默认编码为UTF-8
二、根节点:这里的<student>为根节点,名称可以随意定义,它是文档里唯一的节点,开始于文档开头,结束于文档最末尾
三、元素:示例中<age>10</age>即为xml中的元素,<age>和</age>分别为开始标签和结束标签,10为元素的内容(注:xml的标签区分大小写,如写成<age>和</Age>则无法识别)
四:属性:文档示例"<student1 name=“椎名”></student1>"中,name即为元素student1的属性,一个元素可以拥有多个属性
如何读写xml文件
大致介绍完xml文件,现在来看看如何在unity中读写xml文件(后面使用的示例还是上面的文档)
C#要读写xml文件,首先要引用System.Xml
using System.Xml;
用unity的Resources.Load加载文件
TextAsset xmlFile = Resources.Load<TextAsset>(path); //加载path路径下的xml文件内容XmlDocument document = new XmlDocument(); //创建xml文件的变量document.LoadXml(xmlFile.text); //让xml文件变量读取xmlFile内的文本
解析xml,先获取根节点下的所有子节点
XmlNodeList nodeList = document.SelectSingleNode("student").ChildNodes; //将student节点的子节点加入至nodeList
将nodelist下的某个子节点转化成xml元素,就可以进行读写了
XmlElement elementStudent = (XmlElement)nodeList[num]; //子节点转化为元素elementStudent.GetAttribute("name"); //获取元素的name属性,如果上一行num为0,则这里返回的是"椎名"elementStudent.InnerText //获取元素的内容
完整代码
using UnityEngine;using System.Xml;public class XmlTest : MonoBehaviour{private void Start(){TextAsset xmlFile = Resources.Load<TextAsset>("xml");XmlDocument document = new XmlDocument();document.LoadXml(xmlFile.text);XmlNodeList nodeList = document.SelectSingleNode("student").ChildNodes;XmlElement elementStudent = (XmlElement)nodeList[0];Debug.Log(elementStudent.GetAttribute("name"));foreach (XmlElement element in elementStudent.ChildNodes){Debug.Log(element.InnerText);}}}
将文章开头的完整xml文档放在unity中Resources文件夹里,然后将上面的代码随便挂在一个物体上,运行游戏
可以发现成功将student1的属性"name"和student1中的age和sex这两个元素的内容打印出来了
ok,关于如何unity读写xml文件就介绍到这里,感谢大家的阅读。
如果对unity开发感兴趣,可以加入我们的交流群共同探讨!!
群号:385075578
个人QQ:79305