今天在工作之余学习了一下关于Unity中关于XML的部分。 
在这里要注意添加两个命名空间,如下:

一、xml的解析

首先新建一个xml,可以命名为item.xml,拖进assets里面,内容如下:

  1. <item>
  2. <item1>
  3. <id></id>
  4. <name>china</name>
  5. <year></year>
  6. </item1>
  7. <item2>
  8. <id></id>
  9. <name>usa</name>
  10. <year></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. // Update is called once per frame
  16. void Update () {
  17.  
  18. }
  19.  
  20. void OnGUI() {
  21. if (GUI.Button(new Rect(, , , ), "生成XML"))
  22. {
  23. CreateXML();
  24. Debug.Log("生成XML");
  25. }
  26.  
  27. if (GUI.Button(new Rect(, , , ), "读取XML"))
  28. {
  29. LoadXml();
  30. Debug.Log("读取XML");
  31. }
  32.  
  33. if (GUI.Button(new Rect(, , , ), "修改XML"))
  34. {
  35. updateXML();
  36. Debug.Log("修改XML");
  37.  
  38. }
  39.  
  40. if (GUI.Button(new Rect(, , , ), "增加XML节点"))
  41. {
  42. addXMLData();
  43. Debug.Log("增加XML");
  44. }
  45. }
  46.  
  47. //创建XML
  48. void CreateXML()
  49. {
  50. string path = Application.dataPath + "/data2.xml";
  51. if (!File.Exists(path))
  52. {
  53. //创建最上一层的节点。
  54. XmlDocument xml = new XmlDocument();
  55. //创建最上一层的节点。
  56. XmlElement root = xml.CreateElement("objects");
  57. //创建子节点
  58. XmlElement element = xml.CreateElement("messages");
  59. //设置节点的属性
  60. element.SetAttribute("id", "");
  61. XmlElement elementChild1 = xml.CreateElement("contents");
  62.  
  63. elementChild1.SetAttribute("name", "a");
  64. //设置节点内面的内容
  65. elementChild1.InnerText = "这就是你,你就是天狼";
  66. XmlElement elementChild2 = xml.CreateElement("mission");
  67. elementChild2.SetAttribute("map", "abc");
  68. elementChild2.InnerText = "去吧,少年,去实现你的梦想";
  69. //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
  70. element.AppendChild(elementChild1);
  71. element.AppendChild(elementChild2);
  72. root.AppendChild(element);
  73. xml.AppendChild(root);
  74. //最后保存文件
  75. xml.Save(path);
  76. }
  77. }
  78.  
  79. //读取XML
  80. void LoadXml()
  81. {
  82. //创建xml文档
  83. XmlDocument xml = new XmlDocument();
  84.  
  85. xml.Load(Application.dataPath + "/data2.xml");
  86. //得到objects节点下的所有子节点
  87. XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
  88. //遍历所有子节点
  89. foreach (XmlElement xl1 in xmlNodeList)
  90. {
  91.  
  92. if (xl1.GetAttribute("id") == "")
  93. {
  94. //继续遍历id为1的节点下的子节点
  95. foreach (XmlElement xl2 in xl1.ChildNodes)
  96. {
  97. //放到一个textlist文本里
  98. //textList.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
  99. //得到name为a的节点里的内容。放到TextList里
  100. if (xl2.GetAttribute("name") == "a")
  101. {
  102. Adialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
  103. print("******************"+ xl2.GetAttribute("name") + ": " + xl2.InnerText);
  104. }
  105. //得到name为b的节点里的内容。放到TextList里
  106. else if (xl2.GetAttribute("map") == "abc")
  107. {
  108. Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
  109. print("******************" + xl2.GetAttribute("name") + ": " + xl2.InnerText);
  110. }
  111. }
  112. }
  113. }
  114. print(xml.OuterXml);
  115. }
  116.  
  117. //修改XML
  118. void updateXML()
  119. {
  120. string path = Application.dataPath + "/data2.xml";
  121. if (File.Exists(path))
  122. {
  123. XmlDocument xml = new XmlDocument();
  124. xml.Load(path);
  125. XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
  126. foreach (XmlElement xl1 in xmlNodeList)
  127. {
  128. if (xl1.GetAttribute("id") == "")
  129. {
  130. //把messages里id为1的属性改为5
  131. xl1.SetAttribute("id", "");
  132. }
  133.  
  134. if (xl1.GetAttribute("id") == "")
  135. {
  136. foreach (XmlElement xl2 in xl1.ChildNodes)
  137. {
  138. if (xl2.GetAttribute("map") == "abc")
  139. {
  140. //把mission里map为abc的属性改为df,并修改其里面的内容
  141. xl2.SetAttribute("map", "df");
  142. xl2.InnerText = "我成功改变了你";
  143. }
  144.  
  145. }
  146. }
  147. }
  148. xml.Save(path);
  149. }
  150. }
  151.  
  152. //添加XML
  153. void addXMLData()
  154. {
  155. string path = Application.dataPath + "/data2.xml";
  156. if (File.Exists(path))
  157. {
  158. XmlDocument xml = new XmlDocument();
  159. xml.Load(path);
  160. XmlNode root = xml.SelectSingleNode("objects");
  161. //下面的东西就跟上面创建xml元素是一样的。我们把他复制过来就行了
  162. XmlElement element = xml.CreateElement("messages");
  163. //设置节点的属性
  164. element.SetAttribute("id", "");
  165. XmlElement elementChild1 = xml.CreateElement("contents");
  166.  
  167. elementChild1.SetAttribute("name", "b");
  168. //设置节点内面的内容
  169. elementChild1.InnerText = "天狼,你的梦想就是。。。。。";
  170. XmlElement elementChild2 = xml.CreateElement("mission");
  171. elementChild2.SetAttribute("map", "def");
  172. elementChild2.InnerText = "我要妹子。。。。。。。。。。";
  173. //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
  174. element.AppendChild(elementChild1);
  175. element.AppendChild(elementChild2);
  176.  
  177. root.AppendChild(element);
  178.  
  179. xml.AppendChild(root);
  180. //最后保存文件
  181. xml.Save(path);
  182. }
  183. }

Unity3D_08_XML文件创建,读取,修改,添加的更多相关文章

  1. Java读取json文件并对json数据进行读取、添加、删除与修改操作

    转载:http://blog.csdn.net/qing_yun/article/details/46865863#t0   1.介绍 开发过程中经常会遇到json数据的处理,而单独对json数据进行 ...

  2. PHP获得文件创建、修改、访问时间 filectime() filemtime() fileatime()

    转载博客 零度_PHP的博客   http://blog.sina.com.cn/s/blog_8edc37a801016hk1.html PHP获得文件创建.修改.访问时间 PHP filectim ...

  3. 直接读取修改exe文件

    1. 前言 配置器的编写有很多的方式,主要是直接修改原始的受控端的程序,有的方式是把受控端和配置信息都放到控制端程序的内部,在需要配置受控端的时候直接输入配置信息,生成受控端:也有的方式是在外部直接修 ...

  4. JavaScript 读取修改元素 及 伸拉门案例

    JavaScript 读取修改元素 及 伸拉门案例 版权声明:未经授权,严禁转载! 读取 / 修改元素 - 读取修改元素内容 - 读取修改元素属性 - 读取修改元素样式 元素的内容 读取或修改元素节点 ...

  5. VS2010类模板修改——添加版权、说明

    VS2010类模板修改——添加版权.说明 最近在学习使用Memcache,就想着用C#代码写一个实现Cache与Memcache以及将来若是能融入Redis切换使用的程序集...不过刚开始写代码,强迫 ...

  6. python实现对excel数据进行修改/添加

    import osimport xlrdfrom xlutils.copy import copydef base_dir(filename=None): return os.path.join(os ...

  7. C# mysql set和enum属性字段的读取和添加

    1.使用Navicat for Mysql设置set和enum属性字段: a.enum类型 b.set类型 enum类型在创建表时需要设置初始值,在如图所示的位置设置. 2.C#读取和添加数据 a.e ...

  8. 【转】Pandas学习笔记(三)修改&添加值

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  9. c#配置文件appStrings配置节的读取、添加和修改

    程序开发中经常会用到应用程序配置文件,好处就是维护人员可以直接修改配置文件进行维护,而不用修改程序.好,切入主题. 给项目添加应用程序配置文件App.config,先在里面写几句: <?xml ...

随机推荐

  1. HTML发展历程

    HTML是超文本标记语言的缩写,不同于C或JAVA等编程语言,HTML由标签组成.通过标签可以在网页中插入文字.图片.链接.音频.视频等元素,进而描述网页.和Windows一样,随着技术的发展,HTM ...

  2. 如何在GitHub上删除自己的项目?

    话不多说,直奔主题~ 1.打开GitHub,在主页左边有自己写的库. 2.拿删除第二个库wlh-hub/vue-zsgc为例,点击它,进入下面页面. 3.在导航栏一栏中,找到settings,并点击. ...

  3. php Basic HTTP与Digest HTTP 应用

    Basic HTTP 认证范例 <?php //Basic HTTP 认证 if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authen ...

  4. Go 语言基础——go语言如何优雅的进行测试

    我们可以为Go程序编写三类测试,即:功能测试(test).基准测试(benchmark),也称性能测试(example) #### 测试文件的约定 1. 测试文件的主名称应该以被测试文件主名称为先导, ...

  5. 初学html总结

    2019-08-17 17:58:49 html:超文本标记语言,用于网页结构的搭建 html语言构成:由标签.属性.属性值构成 标签:" < "后面第一个单词 属性:标签后 ...

  6. 代码解读 | VINS 视觉前端

    本文作者是计算机视觉life公众号成员蔡量力,由于格式问题部分内容显示可能有问题,更好的阅读体验,请查看原文链接:代码解读 | VINS 视觉前端 vins前端概述 在搞清楚VINS前端之前,首先要搞 ...

  7. HDU 1079

    题意略. 思路:dfs记忆化搜索即可. #include<bits/stdc++.h> using namespace std; ][][]; ][]; bool is_leap(int ...

  8. P2518 [HAOI2010]计数 类似数位dp

    题意 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现 ...

  9. gym/102021/J GCPC18 模拟拼图

    模拟拼图 题意: 给定n块拼图,每个拼图为四方形,对应四条边有四个数字,如果为0,表示这个边是在边界的,其他数字表示和另一个拼图的一条边相接.保证每个非零数只出现两次. 思路: 模拟,但是要注意几个情 ...

  10. HDU2896病毒入侵AC_自动机

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...