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 ...
随机推荐
- HTML发展历程
HTML是超文本标记语言的缩写,不同于C或JAVA等编程语言,HTML由标签组成.通过标签可以在网页中插入文字.图片.链接.音频.视频等元素,进而描述网页.和Windows一样,随着技术的发展,HTM ...
- 如何在GitHub上删除自己的项目?
话不多说,直奔主题~ 1.打开GitHub,在主页左边有自己写的库. 2.拿删除第二个库wlh-hub/vue-zsgc为例,点击它,进入下面页面. 3.在导航栏一栏中,找到settings,并点击. ...
- php Basic HTTP与Digest HTTP 应用
Basic HTTP 认证范例 <?php //Basic HTTP 认证 if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authen ...
- Go 语言基础——go语言如何优雅的进行测试
我们可以为Go程序编写三类测试,即:功能测试(test).基准测试(benchmark),也称性能测试(example) #### 测试文件的约定 1. 测试文件的主名称应该以被测试文件主名称为先导, ...
- 初学html总结
2019-08-17 17:58:49 html:超文本标记语言,用于网页结构的搭建 html语言构成:由标签.属性.属性值构成 标签:" < "后面第一个单词 属性:标签后 ...
- 代码解读 | VINS 视觉前端
本文作者是计算机视觉life公众号成员蔡量力,由于格式问题部分内容显示可能有问题,更好的阅读体验,请查看原文链接:代码解读 | VINS 视觉前端 vins前端概述 在搞清楚VINS前端之前,首先要搞 ...
- HDU 1079
题意略. 思路:dfs记忆化搜索即可. #include<bits/stdc++.h> using namespace std; ][][]; ][]; bool is_leap(int ...
- P2518 [HAOI2010]计数 类似数位dp
题意 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现 ...
- gym/102021/J GCPC18 模拟拼图
模拟拼图 题意: 给定n块拼图,每个拼图为四方形,对应四条边有四个数字,如果为0,表示这个边是在边界的,其他数字表示和另一个拼图的一条边相接.保证每个非零数只出现两次. 思路: 模拟,但是要注意几个情 ...
- HDU2896病毒入侵AC_自动机
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...