unity使用Xml文档 的操作
2015-06-26 09:54
429 查看
在开发中,我们经常有遇到要处理大量字符串的情况,这时候XML就起到了非常重要的作用。C# 中是如何处理XML的呢,下面我们通过一些简单的例子代码去认识了解一下。
XML的读取:
这里我随便弄了个xml(不好意思,真的 是很随便的。。。。)。
![](http://www.taikr.com/files/user/2014/09-04/141310647d67602079.png?3.7.2)
代码如下:
首先要导入using
using System.Xml;
using System.IO;
private ArrayList Adialogue=new ArrayList();
private ArrayList Bdialogue=new ArrayList();
void LoadXml()
{
//创建xml文档
XmlDocument xml = new XmlDocument();
XmlReaderSettings set = new XmlReaderSettings();
set.IgnoreComments = true;//这个设置是忽略xml注释文档的影响。有时候注释会影响到xml的读取
xml.Load(XmlReader.Create((Application.dataPath+"/data.xml"),set));
//得到objects节点下的所有子节点
XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
//遍历所有子节点
foreach(XmlElement xl1 in xmlNodeList)
{
if(xl1.GetAttribute("id")=="1")
{
//继续遍历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);
}
//得到name为b的节点里的内容。放到TextList里
else if (xl2.GetAttribute("name") == "b")
{
Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
}
}
}
}
print(xml.OuterXml);
}
代码有注释,我就不多说了。看效果吧,可以看到里面的内容已经被读取出来
![](http://www.taikr.com/files/user/2014/09-04/141454ea7568636480.png?3.7.2)
2、修改MXL
直接上代码了。
void updateXML()
{
string path = Application.dataPath + "/data.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")=="1")
{
//把messages里id为1的属性改为5
xl1.SetAttribute("id", "5");
}
if (xl1.GetAttribute("id") =="2")
{
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如下,可以对比下前面的,已经改了
![](http://www.taikr.com/files/user/2014/09-04/141610ae8da1132394.png?3.7.2)
3、现在到创建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", "1");
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);
}
}
又到了看效果的时候了。我们可以看到在assets的目录下多了一个data2.xml文件。(可能出现的有点慢,unity来不及刷新,大家可以到文件夹里看下。)
![](http://www.taikr.com/files/user/2014/09-04/1418019c4353502840.png?3.7.2)
4、那如果要添加xml又如何去操作呢?其实和创建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", "2");
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);
}
}
效果如下。
XML的读取:
这里我随便弄了个xml(不好意思,真的 是很随便的。。。。)。
![](http://www.taikr.com/files/user/2014/09-04/141310647d67602079.png?3.7.2)
代码如下:
首先要导入using
using System.Xml;
using System.IO;
private ArrayList Adialogue=new ArrayList();
private ArrayList Bdialogue=new ArrayList();
void LoadXml()
{
//创建xml文档
XmlDocument xml = new XmlDocument();
XmlReaderSettings set = new XmlReaderSettings();
set.IgnoreComments = true;//这个设置是忽略xml注释文档的影响。有时候注释会影响到xml的读取
xml.Load(XmlReader.Create((Application.dataPath+"/data.xml"),set));
//得到objects节点下的所有子节点
XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
//遍历所有子节点
foreach(XmlElement xl1 in xmlNodeList)
{
if(xl1.GetAttribute("id")=="1")
{
//继续遍历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);
}
//得到name为b的节点里的内容。放到TextList里
else if (xl2.GetAttribute("name") == "b")
{
Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
}
}
}
}
print(xml.OuterXml);
}
代码有注释,我就不多说了。看效果吧,可以看到里面的内容已经被读取出来
![](http://www.taikr.com/files/user/2014/09-04/141454ea7568636480.png?3.7.2)
2、修改MXL
直接上代码了。
void updateXML()
{
string path = Application.dataPath + "/data.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")=="1")
{
//把messages里id为1的属性改为5
xl1.SetAttribute("id", "5");
}
if (xl1.GetAttribute("id") =="2")
{
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如下,可以对比下前面的,已经改了
![](http://www.taikr.com/files/user/2014/09-04/141610ae8da1132394.png?3.7.2)
3、现在到创建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", "1");
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);
}
}
又到了看效果的时候了。我们可以看到在assets的目录下多了一个data2.xml文件。(可能出现的有点慢,unity来不及刷新,大家可以到文件夹里看下。)
![](http://www.taikr.com/files/user/2014/09-04/1418019c4353502840.png?3.7.2)
4、那如果要添加xml又如何去操作呢?其实和创建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", "2");
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);
}
}
效果如下。
![](http://www.taikr.com/files/user/2014/09-04/1418560d015e241273.png?3.7.2)
相关文章推荐
- Unity3d 帧率设置 及在游戏运行时显示帧率
- (1)unity入门,入门前准备
- Unity特殊文件夹
- unity 读取xml 信息
- Unity3D——异步加载游戏场景loading界面的开发
- unity中被瞄准的对象显示血条或子物体(原理)
- Unity学习疑问记录之查找
- Unity3D 内存管理
- 【Unity实用小技巧】NGUI插件的使用总结(一)
- Unity3D占用内存太大的解决方法
- Unity中的对象池用法
- Unity3D中删除组件的方式
- unity 在移动平台中,文件操作路径详解
- Unity3d中制作Loading场景进度条所遇到的问题
- Unity5中的高性能物理组件
- 为ubuntu安装主题管理工具unity tweak tool
- 【Unity基础知识之一】 Unity支持 IOS 64-BIT
- unity发布后运行的错行日志总结
- Unity3D实践系列08, MonoBehaviour类的各种触发事件
- unity开发相关环境(vs、MonoDevelop)windows平台编码问题