今天在工作之余学习了一下关于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文件创建,读取,修改,添加的更多相关文章

  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. c# http Post Get 方法

    /// <summary> /// get方式访问webapi /// </summary> /// <param name="url">< ...

  2. 阿里云短信服务(JAVA)

    一,前言 ​ 短信验证码想必大家都不陌生,在很多网站,APP中都有使用到.比如登录,注册,身份校验等场景.不过通常情况下,短信服务都是外包给第三方公司的,接下来向大家分享如何使用阿里的短信服务. 二, ...

  3. Java源码之ConcurrentHashMap

    ⑴背景 ConcurrentHashMap是线程安全高效的HashMap.而HashMap在多线程情况下强行使用HashMap的put方法可能会导致程序死循环,使CPU使用率达到100%.(http: ...

  4. 编程使用c#连接到IBM db2的两种方式

    一:使用c#通过odbc连接到IBM db2使用 ConnectionString 属性连接到各种数据源. 部署:只要在客户端安装IBM DB2 ODBC driver.配置DSn即可. 1):可以单 ...

  5. Day 02--选题与设计(二)

    1.今天我们主要设计了一下我们微信小程序可以实现的功能,客户操作的基本流程,研究了墨刀这个工具的使用方法并试着将想法转化为原型设计项目.我们给自己的系统起名为“天天好餐”.我们认为食堂订送餐与网络上的 ...

  6. Go类型别名与类型定义区别

    类型别名和自定义类型区别 自定义类型 //自定义类型是定义了一个全新的类型 //将MyInt定义为int类型 type MyInt int 类型别名 //类型别名规定:TypeAlias只是Type的 ...

  7. springboot中oracle的依赖添加失败的解决

    由于Oracle授权问题,Maven3不提供oracle JDBC driver  步骤一:在pom中添加如下: <!--Oracle 驱动 --> <dependency> ...

  8. VScode 插件推荐与C/C++配置

    以下是我经常用到的VScode插件.由于插件本身具有详细的配置和介绍,不对插件本身的安装配置进行说明,仅仅支出这些插件的主要功能.具体使用强烈推荐看一下安装插件后的说明,大多数的问题和设置都可以找到, ...

  9. 简单使用AspectJ

    AspectJ是一个AOP框架,由于SpringAOP的配置过于繁琐,因此使用了AspectJ依赖注解开发 1.Aspecj依赖坐标,此处省略了Spring相关依赖 <dependency> ...

  10. python初级知识

    一级标题 空格+内容 二级标题 空格+内容 有序内容 1.+Tab 无序内容 -+Tan 代码块 print("hello world") 三个```+回车 添加图片 表格创建 C ...