Unity3D_08_XML文件创建,读取,修改,添加
时间:2020-05-14
本文章向大家介绍Unity3D_08_XML文件创建,读取,修改,添加,主要包括Unity3D_08_XML文件创建,读取,修改,添加使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Unity3D_08_XML文件创建,读取,修改,添加
本文转载:https://www.cnblogs.com/NBOWeb/p/8968036.html
今天在工作之余学习了一下关于Unity中关于XML的部分。
在这里要注意添加两个命名空间,如下:
一、xml的解析
首先新建一个xml,可以命名为item.xml,拖进assets里面,内容如下:
1 <item> 2 <item1> 3 <id>1</id> 4 <name>china</name> 5 <year>2016</year> 6 </item1> 7 <item2> 8 <id>2</id> 9 <name>usa</name> 10 <year>2017</year> 11 </item2> 12 </item>
通过这个xml来解析。然后写一个.cs文件,注意需要导入这两个头文件
1 using System.Xml; //xml操作 2 using System.IO; //file操作
一个是对XML文件的命名空间,里面有关xml的很多api;
一个是对文件读写的命名空间,是对文件的读取,保存操作;
解析函数如下:
1 //解析xml 2 void parseXml(){ 3 //也可以前面加上@,区别就是有@的话,双引号里面的内容不转义,比如" \" " 4 //string filePath = Application.dataPath+@"/Resources/item.xml"; 5 string filePath = Application.dataPath+"/Resources/item.xml"; 6 if(File.Exists(filePath)){ 7 XmlDocument xmlDoc = new XmlDocument(); 8 xmlDoc.Load(filePath); 9 XmlNodeList node = xmlDoc.SelectSingleNode("item").ChildNodes; 10 //遍历节点 11 foreach(XmlElement ele in node){ 12 //item下面的节点 13 Debug.Log(ele.Name); 14 15 if(ele.Name == "item1"){ 16 //first item1 17 foreach(XmlElement i1 in ele.ChildNodes){ 18 Debug.Log(i1.Name); 19 if(i1.Name == "id"){ 20 id1 = i1.InnerText; 21 } 22 if(i1.Name == "name"){ 23 name1 = i1.InnerText; 24 } 25 if(i1.Name=="year"){ 26 year1 = i1.InnerText; 27 } 28 } 29 } 30 if(ele.Name == "item2"){ 31 //first item1 32 foreach(XmlElement i2 in ele.ChildNodes){ 33 Debug.Log(i2.Name); 34 if(i2.Name == "id"){ 35 id2 = i2.InnerText; 36 } 37 if(i2.Name == "name"){ 38 name2 = i2.InnerText; 39 } 40 if(i2.Name=="year"){ 41 year2 = i2.InnerText; 42 } 43 } 44 } 45 46 } 47 } 48 Debug.Log("id1: "+id1); 49 Debug.Log("name1: "+name1); 50 Debug.Log("year1: "+year1); 51 Debug.Log("id2: "+id2); 52 Debug.Log("name2: "+name2); 53 Debug.Log("year2: "+year2); 54 }
通过解析即可得到xml的值
后面的增删改其实不怎么用,因为一般都是策划直接修改表,而不用代码修改,但是还是可以看看。
二:XML文件创建、读取、修改、添加
代码如下:
1 using UnityEngine; 2 using System.Collections; 3 using System.Xml; 4 using System.IO; 5 6 public class XMLDemo : MonoBehaviour { 7 private ArrayList Adialogue = new ArrayList(); 8 private ArrayList Bdialogue = new ArrayList(); 9 private ArrayList textList = new ArrayList(); 10 // Use this for initialization 11 void Start () { 12 13 14 } 15 16 // Update is called once per frame 17 void Update () { 18 19 } 20 21 void OnGUI() { 22 if (GUI.Button(new Rect(50, 50, 100, 50), "生成XML")) 23 { 24 CreateXML(); 25 Debug.Log("生成XML"); 26 } 27 28 if (GUI.Button(new Rect(50, 100, 100, 50), "读取XML")) 29 { 30 LoadXml(); 31 Debug.Log("读取XML"); 32 } 33 34 if (GUI.Button(new Rect(50, 150, 100, 50), "修改XML")) 35 { 36 updateXML(); 37 Debug.Log("修改XML"); 38 39 } 40 41 if (GUI.Button(new Rect(50, 200, 100, 50), "增加XML节点")) 42 { 43 addXMLData(); 44 Debug.Log("增加XML"); 45 } 46 } 47 48 //创建XML 49 void CreateXML() 50 { 51 string path = Application.dataPath + "/data2.xml"; 52 if (!File.Exists(path)) 53 { 54 //创建最上一层的节点。 55 XmlDocument xml = new XmlDocument(); 56 //创建最上一层的节点。 57 XmlElement root = xml.CreateElement("objects"); 58 //创建子节点 59 XmlElement element = xml.CreateElement("messages"); 60 //设置节点的属性 61 element.SetAttribute("id", "1"); 62 XmlElement elementChild1 = xml.CreateElement("contents"); 63 64 elementChild1.SetAttribute("name", "a"); 65 //设置节点内面的内容 66 elementChild1.InnerText = "这就是你,你就是天狼"; 67 XmlElement elementChild2 = xml.CreateElement("mission"); 68 elementChild2.SetAttribute("map", "abc"); 69 elementChild2.InnerText = "去吧,少年,去实现你的梦想"; 70 //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序 71 element.AppendChild(elementChild1); 72 element.AppendChild(elementChild2); 73 root.AppendChild(element); 74 xml.AppendChild(root); 75 //最后保存文件 76 xml.Save(path); 77 } 78 } 79 80 //读取XML 81 void LoadXml() 82 { 83 //创建xml文档 84 XmlDocument xml = new XmlDocument(); 85 86 xml.Load(Application.dataPath + "/data2.xml"); 87 //得到objects节点下的所有子节点 88 XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes; 89 //遍历所有子节点 90 foreach (XmlElement xl1 in xmlNodeList) 91 { 92 93 if (xl1.GetAttribute("id") == "1") 94 { 95 //继续遍历id为1的节点下的子节点 96 foreach (XmlElement xl2 in xl1.ChildNodes) 97 { 98 //放到一个textlist文本里 99 //textList.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText); 100 //得到name为a的节点里的内容。放到TextList里 101 if (xl2.GetAttribute("name") == "a") 102 { 103 Adialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText); 104 print("******************"+ xl2.GetAttribute("name") + ": " + xl2.InnerText); 105 } 106 //得到name为b的节点里的内容。放到TextList里 107 else if (xl2.GetAttribute("map") == "abc") 108 { 109 Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText); 110 print("******************" + xl2.GetAttribute("name") + ": " + xl2.InnerText); 111 } 112 } 113 } 114 } 115 print(xml.OuterXml); 116 } 117 118 //修改XML 119 void updateXML() 120 { 121 string path = Application.dataPath + "/data2.xml"; 122 if (File.Exists(path)) 123 { 124 XmlDocument xml = new XmlDocument(); 125 xml.Load(path); 126 XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes; 127 foreach (XmlElement xl1 in xmlNodeList) 128 { 129 if (xl1.GetAttribute("id") == "1") 130 { 131 //把messages里id为1的属性改为5 132 xl1.SetAttribute("id", "5"); 133 } 134 135 if (xl1.GetAttribute("id") == "2") 136 { 137 foreach (XmlElement xl2 in xl1.ChildNodes) 138 { 139 if (xl2.GetAttribute("map") == "abc") 140 { 141 //把mission里map为abc的属性改为df,并修改其里面的内容 142 xl2.SetAttribute("map", "df"); 143 xl2.InnerText = "我成功改变了你"; 144 } 145 146 } 147 } 148 } 149 xml.Save(path); 150 } 151 } 152 153 //添加XML 154 void addXMLData() 155 { 156 string path = Application.dataPath + "/data2.xml"; 157 if (File.Exists(path)) 158 { 159 XmlDocument xml = new XmlDocument(); 160 xml.Load(path); 161 XmlNode root = xml.SelectSingleNode("objects"); 162 //下面的东西就跟上面创建xml元素是一样的。我们把他复制过来就行了 163 XmlElement element = xml.CreateElement("messages"); 164 //设置节点的属性 165 element.SetAttribute("id", "2"); 166 XmlElement elementChild1 = xml.CreateElement("contents"); 167 168 elementChild1.SetAttribute("name", "b"); 169 //设置节点内面的内容 170 elementChild1.InnerText = "天狼,你的梦想就是。。。。。"; 171 XmlElement elementChild2 = xml.CreateElement("mission"); 172 elementChild2.SetAttribute("map", "def"); 173 elementChild2.InnerText = "我要妹子。。。。。。。。。。"; 174 //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序 175 element.AppendChild(elementChild1); 176 element.AppendChild(elementChild2); 177 178 root.AppendChild(element); 179 180 xml.AppendChild(root); 181 //最后保存文件 182 xml.Save(path); 183 } 184 }
原文地址:https://www.cnblogs.com/RainZZY/p/12886975.html
- 基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化
- 基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理
- Ubuntu 17.04 x64 安装 Docker CE
- 这是一篇清晰易懂的 Rxjava 入门教程
- 可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI
- 简单好用的阴影库 ShadowLayout
- 【项目管理和构建】——Maven下载、安装和配置(二)
- 打印机安全研究(一):不容乐观的网络打印机安全状况
- Apache Maven 入门篇
- hyperledger v1.0.5 区块链运维入门(一)
- 分析无线遥控器信号并制作Hack硬件进行攻击
- 第二章:Shiro入门——深入浅出学Shiro细粒度权限开发框架
- 在Apache Spark上跑Logistic Regression算法
- 第四章:Shiro的身份认证(Authentication)——深入浅出学Shiro细粒度权限开发框架
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言和QuantLib中Nelson-Siegel模型收益曲线建模分析
- 用R语言用Nelson Siegel和线性插值模型对债券价格和收益率建模
- R语言LME4混合效应模型研究教师的受欢迎程度
- R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
- R语言中的风险价值模型度量指标TVaR与VaR
- R语言用线性回归模型预测空气质量臭氧数据
- R语言线性模型臭氧预测: 加权泊松回归,普通最小二乘,加权负二项式模型
- R语言中回归和分类模型选择的性能指标
- R语言 线性混合效应模型实战案例
- R语言中敏感性和特异性、召回率和精确度作为选型标准的华夫图案例
- R语言中的多类别问题的绩效衡量:F1-score 和广义AUC
- Dart语言基础Map、List、Set操作合辑
- 2.2.2 类反射场景与使用 -《SSM深入解析与项目实战》
- 每天手撕一道算法-64. 最小路径和
- Flutter 1.20 下的 Hybrid Composition 深度解析