您的位置:首页 > 移动开发 > Unity3D

unity里利用C# 读写XML

2015-07-03 18:33 477 查看


unity里利用C# 读写XML

分类: Unity3D2014-09-04
18:36 1024人阅读 评论(1) 收藏 举报

在开发中,我们经常有遇到要处理大量字符串的情况,这时候XML就起到了非常重要的作用。C# 中是如何处理XML的呢,下面我们通过一些简单的例子代码去认识了解一下。

XML的读取:
这里我随便弄了个xml(不好意思,真的 是很随便的。。。。)。



代码如下:
首先要导入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);



}

代码有注释,我就不多说了。看效果吧,可以看到里面的内容已经被读取出来



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如下,可以对比下前面的,已经改了



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来不及刷新,大家可以到文件夹里看下。)



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);

}

}

效果如下。



总的来说,代码没什么难度,就是有点烦,来来回回也都是这几句话。






明天就星期五了,要放假了。开心开心极了。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: