今天在工作之余学习了一下关于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. 【0728 | 预习】第三篇 Python基础

    第三篇 Python基础预习 Part 1 变量 一.什么是变量? 二.为什么要有变量? 三.定义变量 四.变量的组成 五.变量名的命名规范 六.变量名的两种风格 Part 2 常量 Part 3 P ...

  2. Spark 系列(九)—— Spark SQL 之 Structured API

    一.创建DataFrame和Dataset 1.1 创建DataFrame Spark 中所有功能的入口点是 SparkSession,可以使用 SparkSession.builder() 创建.创 ...

  3. 项目构建分析和 webpack 优化实践

    加入新公司一个月,最近接手在做一个 chrom 浏览器插件的项目,开发过程中发现项目打包的时间很长,足足有30多秒,这是让人很难接受的,而且构建的显示了几条包体积过大的提示信息: 可以看到,打包后有三 ...

  4. Java学习|HTTP请求头

    https://www.cnblogs.com/honghong87/articles/6941436.html 常见http请求报文头属性      Accept:告诉服务端,客户端接受什么类型的响 ...

  5. lxml解析网页

    目录 1. 什么是lxml 2. 初次使用 3. xpath 3.2 标签定位 3.3 序列定位 3.4 轴定位 4. 实例 1. 什么是lxml lxml是干什么的?简单的说来,lxml是帮助我们解 ...

  6. Python模块之pexpect

    一.pexpect模块介绍 Pexpect使Python成为控制其他应用程序的更好工具.可以理解为Linux下的expect的Python封装,通过pexpect我们可以实现对ssh,ftp,pass ...

  7. Mybatis框架(8)---Mybatis插件原理

    Mybatis插件原理 在实际开发过程中,我们经常使用的Mybaits插件就是分页插件了,通过分页插件我们可以在不用写count语句和limit的情况下就可以获取分页后的数据,给我们开发带来很大 的便 ...

  8. 基础部分之System、Object、Calendar、StringBuffer

    System.out.println(obj)和 System.out.println(obj.toString())区别 public static void main(String[] args) ...

  9. Kali-Linux-美化与优化

    照理说,linux的桌面是不应当存在在这个世界上的,作为一个linux用户,一味捣鼓桌面显得hin-不专业.但是,虚拟机要用到,浏览器要用到--更何况,自己的老婆能不打扮一下么? update:201 ...

  10. 持续集成高级篇之Jekins参数化构建(二)

    系列目录 上一节我们讲解了如何使用bat脚本或者powershell脚本自身的机制来达到参数化构建的目的,这在一定程序上增加了灵活性,然而缺点也相当明显:它只能适应一些相对比较固定的参数传入(比如像上 ...