Unity3D_08_XML文件创建,读取,修改,添加
今天在工作之余学习了一下关于Unity中关于XML的部分。
在这里要注意添加两个命名空间,如下:
一、xml的解析
首先新建一个xml,可以命名为item.xml,拖进assets里面,内容如下:
<item>
<item1>
<id></id>
<name>china</name>
<year></year>
</item1>
<item2>
<id></id>
<name>usa</name>
<year></year>
</item2>
</item>
通过这个xml来解析。然后写一个.cs文件,注意需要导入这两个头文件
using System.Xml; //xml操作
using System.IO; //file操作
一个是对XML文件的命名空间,里面有关xml的很多api;
一个是对文件读写的命名空间,是对文件的读取,保存操作;
解析函数如下:
//解析xml
void parseXml(){
//也可以前面加上@,区别就是有@的话,双引号里面的内容不转义,比如" \" "
//string filePath = Application.dataPath+@"/Resources/item.xml";
string filePath = Application.dataPath+"/Resources/item.xml";
if(File.Exists(filePath)){
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filePath);
XmlNodeList node = xmlDoc.SelectSingleNode("item").ChildNodes;
//遍历节点
foreach(XmlElement ele in node){
//item下面的节点
Debug.Log(ele.Name); if(ele.Name == "item1"){
//first item1
foreach(XmlElement i1 in ele.ChildNodes){
Debug.Log(i1.Name);
if(i1.Name == "id"){
id1 = i1.InnerText;
}
if(i1.Name == "name"){
name1 = i1.InnerText;
}
if(i1.Name=="year"){
year1 = i1.InnerText;
}
}
}
if(ele.Name == "item2"){
//first item1
foreach(XmlElement i2 in ele.ChildNodes){
Debug.Log(i2.Name);
if(i2.Name == "id"){
id2 = i2.InnerText;
}
if(i2.Name == "name"){
name2 = i2.InnerText;
}
if(i2.Name=="year"){
year2 = i2.InnerText;
}
}
} }
}
Debug.Log("id1: "+id1);
Debug.Log("name1: "+name1);
Debug.Log("year1: "+year1);
Debug.Log("id2: "+id2);
Debug.Log("name2: "+name2);
Debug.Log("year2: "+year2);
}
通过解析即可得到xml的值
后面的增删改其实不怎么用,因为一般都是策划直接修改表,而不用代码修改,但是还是可以看看。
二:XML文件创建、读取、修改、添加
代码如下:
using UnityEngine;
using System.Collections;
using System.Xml;
using System.IO; public class XMLDemo : MonoBehaviour {
private ArrayList Adialogue = new ArrayList();
private ArrayList Bdialogue = new ArrayList();
private ArrayList textList = new ArrayList();
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () { } void OnGUI() {
if (GUI.Button(new Rect(, , , ), "生成XML"))
{
CreateXML();
Debug.Log("生成XML");
} if (GUI.Button(new Rect(, , , ), "读取XML"))
{
LoadXml();
Debug.Log("读取XML");
} if (GUI.Button(new Rect(, , , ), "修改XML"))
{
updateXML();
Debug.Log("修改XML"); } if (GUI.Button(new Rect(, , , ), "增加XML节点"))
{
addXMLData();
Debug.Log("增加XML");
}
} //创建XML
void CreateXML()
{
string path = Application.dataPath + "/data2.xml";
if (!File.Exists(path))
{
//创建最上一层的节点。
XmlDocument xml = new XmlDocument();
//创建最上一层的节点。
XmlElement root = xml.CreateElement("objects");
//创建子节点
XmlElement element = xml.CreateElement("messages");
//设置节点的属性
element.SetAttribute("id", "");
XmlElement elementChild1 = xml.CreateElement("contents"); elementChild1.SetAttribute("name", "a");
//设置节点内面的内容
elementChild1.InnerText = "这就是你,你就是天狼";
XmlElement elementChild2 = xml.CreateElement("mission");
elementChild2.SetAttribute("map", "abc");
elementChild2.InnerText = "去吧,少年,去实现你的梦想";
//把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
element.AppendChild(elementChild1);
element.AppendChild(elementChild2);
root.AppendChild(element);
xml.AppendChild(root);
//最后保存文件
xml.Save(path);
}
} //读取XML
void LoadXml()
{
//创建xml文档
XmlDocument xml = new XmlDocument(); xml.Load(Application.dataPath + "/data2.xml");
//得到objects节点下的所有子节点
XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
//遍历所有子节点
foreach (XmlElement xl1 in xmlNodeList)
{ if (xl1.GetAttribute("id") == "")
{
//继续遍历id为1的节点下的子节点
foreach (XmlElement xl2 in xl1.ChildNodes)
{
//放到一个textlist文本里
//textList.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
//得到name为a的节点里的内容。放到TextList里
if (xl2.GetAttribute("name") == "a")
{
Adialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
print("******************"+ xl2.GetAttribute("name") + ": " + xl2.InnerText);
}
//得到name为b的节点里的内容。放到TextList里
else if (xl2.GetAttribute("map") == "abc")
{
Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
print("******************" + xl2.GetAttribute("name") + ": " + xl2.InnerText);
}
}
}
}
print(xml.OuterXml);
} //修改XML
void updateXML()
{
string path = Application.dataPath + "/data2.xml";
if (File.Exists(path))
{
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
foreach (XmlElement xl1 in xmlNodeList)
{
if (xl1.GetAttribute("id") == "")
{
//把messages里id为1的属性改为5
xl1.SetAttribute("id", "");
} if (xl1.GetAttribute("id") == "")
{
foreach (XmlElement xl2 in xl1.ChildNodes)
{
if (xl2.GetAttribute("map") == "abc")
{
//把mission里map为abc的属性改为df,并修改其里面的内容
xl2.SetAttribute("map", "df");
xl2.InnerText = "我成功改变了你";
} }
}
}
xml.Save(path);
}
} //添加XML
void addXMLData()
{
string path = Application.dataPath + "/data2.xml";
if (File.Exists(path))
{
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNode root = xml.SelectSingleNode("objects");
//下面的东西就跟上面创建xml元素是一样的。我们把他复制过来就行了
XmlElement element = xml.CreateElement("messages");
//设置节点的属性
element.SetAttribute("id", "");
XmlElement elementChild1 = xml.CreateElement("contents"); elementChild1.SetAttribute("name", "b");
//设置节点内面的内容
elementChild1.InnerText = "天狼,你的梦想就是。。。。。";
XmlElement elementChild2 = xml.CreateElement("mission");
elementChild2.SetAttribute("map", "def");
elementChild2.InnerText = "我要妹子。。。。。。。。。。";
//把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
element.AppendChild(elementChild1);
element.AppendChild(elementChild2); root.AppendChild(element); xml.AppendChild(root);
//最后保存文件
xml.Save(path);
}
}
Unity3D_08_XML文件创建,读取,修改,添加的更多相关文章
- Java读取json文件并对json数据进行读取、添加、删除与修改操作
转载:http://blog.csdn.net/qing_yun/article/details/46865863#t0 1.介绍 开发过程中经常会遇到json数据的处理,而单独对json数据进行 ...
- PHP获得文件创建、修改、访问时间 filectime() filemtime() fileatime()
转载博客 零度_PHP的博客 http://blog.sina.com.cn/s/blog_8edc37a801016hk1.html PHP获得文件创建.修改.访问时间 PHP filectim ...
- 直接读取修改exe文件
1. 前言 配置器的编写有很多的方式,主要是直接修改原始的受控端的程序,有的方式是把受控端和配置信息都放到控制端程序的内部,在需要配置受控端的时候直接输入配置信息,生成受控端:也有的方式是在外部直接修 ...
- JavaScript 读取修改元素 及 伸拉门案例
JavaScript 读取修改元素 及 伸拉门案例 版权声明:未经授权,严禁转载! 读取 / 修改元素 - 读取修改元素内容 - 读取修改元素属性 - 读取修改元素样式 元素的内容 读取或修改元素节点 ...
- VS2010类模板修改——添加版权、说明
VS2010类模板修改——添加版权.说明 最近在学习使用Memcache,就想着用C#代码写一个实现Cache与Memcache以及将来若是能融入Redis切换使用的程序集...不过刚开始写代码,强迫 ...
- python实现对excel数据进行修改/添加
import osimport xlrdfrom xlutils.copy import copydef base_dir(filename=None): return os.path.join(os ...
- C# mysql set和enum属性字段的读取和添加
1.使用Navicat for Mysql设置set和enum属性字段: a.enum类型 b.set类型 enum类型在创建表时需要设置初始值,在如图所示的位置设置. 2.C#读取和添加数据 a.e ...
- 【转】Pandas学习笔记(三)修改&添加值
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- c#配置文件appStrings配置节的读取、添加和修改
程序开发中经常会用到应用程序配置文件,好处就是维护人员可以直接修改配置文件进行维护,而不用修改程序.好,切入主题. 给项目添加应用程序配置文件App.config,先在里面写几句: <?xml ...
随机推荐
- 关于Java虚拟机运行时数据区域的总结
Java虚拟机运行时数据区域 程序计数器(Program Counter) 程序计数器作为一个概念模型,这个是用来指示下一条需要执行的字节码指令在哪. Java的多线程实际上是通过线程轮转做到的,如果 ...
- (二)对象以及变量的并发访问--synchronized的使用细节,用法
具体的记录synchronized关键的各种使用方式,注意事项.感觉一步一步跟我来都可以看懂滴 大致是按照以下思路进行书写的.黑体字可以理解为结论, 1.synchronized锁的是什么? 2.sy ...
- 使用Prerender.io进行网站预加载
我在自己的项目中是采用的前后端分离的技术,前端用的VUE开发,后端是JAVA开发,tomcat部署,nginx转发,但是VUE开发的项目缺点就是不利于SEO,所以针对SEO做了预加载的操作. 决定采用 ...
- 洛谷 P2044 [NOI2012]随机数生成器
题意简述 读入X[0], m, a, c, n和g $ X[n+1]=(a*X[n]+c)\mod m $ 求X数列的第n项对g取余的值. 题解思路 矩阵加速 设\[ F=\begin{bmatrix ...
- 快速了解Python并发编程的工程实现(上)
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
- 100天搞定机器学习|day44 k均值聚类数学推导与python实现
[如何正确使用「K均值聚类」? 1.k均值聚类模型 给定样本,每个样本都是m为特征向量,模型目标是将n个样本分到k个不停的类或簇中,每个样本到其所属类的中心的距离最小,每个样本只能属于一个类.用C表示 ...
- IntelliJ IDEA 2019 快捷键终极大全,速度收藏!
转载注明:https://blog.csdn.net/WantFlyDaCheng/article/details/100078777 自动代码 查询快捷键 其他快捷键 调试快捷键 重构 十大Inte ...
- 从无到有构建vue实战项目(七)
十四.Vuex的使用 Vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vu ...
- 章节十六、5-TestNG高级功能--Part2
一.测试用例的依赖关系--->(dependsOnMethods = {"依赖方法名"}) 1.在实现自动化的过程中,有些测试用例必须在其它测试用例执行之后才能运行,两者之间 ...
- Codeforces 814D
题意略. 思路: 由于不重合这个性质,我们可以将每一个堆叠的圆圈单独拿出来考虑,而不用去考虑其他并列在同一层的存在, 在贪心解法下,发现,被嵌套了偶数层的圆圈永远是要被减去的,而奇数层的圆圈是要加上的 ...