关于Unity读取XML的简单学习
2016-03-08 23:02
477 查看
本文转自 宣雨松 的博客 http://www.xuanyusong.com/archives/1901
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Xml; using System.IO; using System.Text; public class MyXML : MonoBehaviour { public void CreatXml() { //保存XML的路径,注意路径 string filePath = Application.dataPath + @"/"; //判断当前路径下是否有该文件 if (!File.Exists(filePath)) { //创建XML文档实例 XmlDocument xmlDoc = new XmlDocument(); //创建root节点,也就是最上层节点 XmlElement root = xmlDoc.CreateElement("transforms"); //继续创建下一个节点 XmlElement elmNew = xmlDoc.CreateElement("rotation"); //设置节点的两个参数 ID和NAME elmNew.SetAttribute("id", "0"); elmNew.SetAttribute("name", "eagle"); //继续创建下一层节点 XmlElement rotation_X = xmlDoc.CreateElement("x"); //设置节点中的数值 rotation_X.InnerText = "0"; XmlElement rotation_Y = xmlDoc.CreateElement("y"); rotation_Y.InnerText = "1"; XmlElement rotation_Z = xmlDoc.CreateElement("z"); rotation_Z.InnerText = "2"; //这里在添加一个节点属性,用来区分。。 rotation_Z.SetAttribute("id", "1"); //把节点一层层的添加至xmlDoc中,它们之间的先后顺序,这个就是生成XML文件的顺序 elmNew.AppendChild(rotation_X); elmNew.AppendChild(rotation_Y); elmNew.AppendChild(rotation_Z); root.AppendChild(elmNew); xmlDoc.AppendChild (root); //把XML保存至路径文件中 xmlDoc.Save(filePath); Debug.Log("成功创建"); } } public void UpdateXml() { string filePath = Application.dataPath + @"/"; if (File.Exists(filePath)) { XmlDocument xmlDoc = new XmlDocument(); //根据路径把XML文件读出来 xmlDoc.Load(filePath); //得到transform下的所有节点 XmlNodeList nodeList = xmlDoc.SelectSingleNode("transform").ChildNodes; //遍历所有子节点 foreach (XmlElement xe in nodeList ) { //拿到节点中属性ID=0的节点 if (xe.GetAttribute("id") == "0") { //更新节点属性 xe.SetAttribute("id", "1000"); //继续遍历 foreach (XmlElement xl in xe.ChildNodes ) { if (xl.Name == "z") xl.InnerText = "update0000"; //这里是修改节点名称对应的数值,而上面的拿到节点连带的属性。 } break; } } xmlDoc.Save(filePath); Debug.Log("完成更新"); } } public void AddXml() { string filepath = Application.dataPath + @"/"; if (File.Exists(filepath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filepath); XmlNode root = xmlDoc.SelectSingleNode("transforms"); XmlElement elmNew = xmlDoc.CreateElement("rotation"); elmNew.SetAttribute("id", "1"); elmNew.SetAttribute("name", "赖张殷"); XmlElement rotation_X = xmlDoc.CreateElement("x"); rotation_X.InnerText = "0"; rotation_X.SetAttribute("id", "1"); XmlElement rotation_Y = xmlDoc.CreateElement("y"); rotation_Y.InnerText = "1"; XmlElement rotation_Z = xmlDoc.CreateElement("z"); rotation_Z.InnerText = "2"; elmNew.AppendChild(rotation_X); elmNew.AppendChild(rotation_Y); elmNew.AppendChild(rotation_Z); root.AppendChild(elmNew); xmlDoc.AppendChild(root); xmlDoc.Save(filepath); Debug.Log("加载完成"); } } public void DeleteXml() { string filePath = Application.dataPath + @"/"; if (File.Exists(filePath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); XmlNodeList nodeList = xmlDoc.SelectSingleNode("transform").ChildNodes; foreach (XmlElement xe in nodeList ) { if (xe.GetAttribute("id") == "1") { xe.RemoveAttribute("id"); } foreach (XmlElement xl in xe.ChildNodes ) { if (xl.Name == "z") xl.RemoveAll(); } } xmlDoc.Save(filePath); Debug.Log("完成删除"); } } public void ShowXml() { string filePath = Application.dataPath + @"/"; if (File.Exists(filePath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); XmlNodeList nodeList = xmlDoc.SelectSingleNode("transform").ChildNodes; //遍历每一个节点,拿节点的属性以及节点的内容 foreach (XmlElement xe in nodeList ) { Debug.Log("Attribute" + xe.GetAttribute("name")); Debug.Log("NAME" + xe.Name); foreach (XmlElement xl in xe.ChildNodes ) { if (xl.Name == "y") Debug.Log("VALUE:" + xl.InnerText); } } Debug.Log("ALL=" + xmlDoc.OuterXml); } } }
相关文章推荐
- 【Unity优化(转)】Unity+NGUI性能优化方法总结(我项目组的做法)
- Unity3d 加密 Assembly-CSharp.dll (Android平台) 全记录
- Unity3D启动报错的解决方案
- <Unity3D>上下左右 键控制人移动
- unity3d NGUI多场景共用界面制作
- <Unity3D>Unity3D入门篇——第六讲 GUI控件(四)
- <Unity3D>Unity3D入门篇——第五讲 GUI控件(三)
- <Unity3D>Unity3D入门篇——第四讲 GUI控件(二)
- Unity3d中UI开发的MVC模式
- 【unity】AR调研
- Google CardBoard 之 Unity5.3.3f1 + XCode 7.2.1 部署笔记
- Unity3D操作技巧
- Unity编辑器扩展-菜单项
- Unity游戏逻辑服务器实践
- Unity游戏逻辑服务器实践
- Unity3D游戏中Android和iOS本地推送通知
- unity小地图制作代码....
- UnitySocket通讯,实现连个设备进行消息通讯
- Unity3D -- 设置Android支付横屏竖屏
- Unity3d外包-就找北京动点软件