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 ...
随机推荐
- (三)c#Winform自定义控件-有图标的按钮
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- Java 在spring cloud中使用Redis,spring boot同样适用
1.本地安装redis服务,官网下载. 2.在开发中要使用redis,首先要启动本地redis服务,启动后页面如下: 3.在spring boot项目pom.xml文件中添加Redis需要的依赖包,可 ...
- 深入剖析PHP7内核源码(一)- PHP架构与生命周期
PHP7 为什么这么快? 全新的zval 更节约的空间,栈上分配内存 zend_string 存储字符串的Hash值,数组查询的时候不需要进行Hash计算 在HashTable桶内直接存数据,减少了内 ...
- 记一次Linux修改MySQL配置不生效的问题
背景 自己手上有一个项目服务用的是AWS EC2,最近从安全性和性能方面考虑,最近打算把腾讯云的MySQL数据库迁移到AWS RDS上,因为AWS的出口规则和安全组等问题,我需要修改默认的3306端口 ...
- serverless在微店node领域的探索应用
背景 目前微店中台团队为了满足公司大部分产品.运营以及部分后端开发人员的尝鲜和试错的需求,提供了一套基于图形化搭建的服务端接口交付方案,利用该方案及提供的系统可生成一副包含运行时环境定义可立即运行的工 ...
- ansible模块介绍之ios_command
一.模块简介 ios_command此模块将任意命令发送到ios节点并返回设备读取的结果 此模块不支持在配置模式下使用,即只支持在用户模式>和特权模式#下使用 官方文档地址:https://do ...
- 剑指offer总结一:字符、数字重复问题
问题1:字符串中第一个不重复的字符 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是" ...
- 淘宝自动登录2.0,新增Cookies序列化
前段时间时间为大家讲解了如何使用requests库模拟登录淘宝,而今天我们将对该功能进行丰富.所以我们把之前的那个版本定为1.0,而今天修改的版本定为2.0.版本的地跌意味着功能的升级,那今天的2.0 ...
- 随笔编号-01 如何比较日期类型的String 大小浅谈.
有三种解决方法: 第一种直接用字符串类的compareTo方法: String t1="20160707"; String t2="20160708"; int ...
- JS-对象的深浅拷贝及其新增方法测试
我们在了解数据类型的时候,都知道一般的字符,数值,undefined和布尔值等都为一般数据类型,它们在进行数据传输的时候,进行的是值传递,当我们修改新数据,是不影响老数据的.但是我们今天要讲的是数据类 ...