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

关于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);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: