Unity学习笔记:配置文件(XML)

创建XML

CreateElement    创建XML元素

SetAttribute  设置属性

InnerText           获取或设置节点及其所有子节点的串联值。

AppendChild    将指定的节点添加到该节点的子节点列表的末尾

Save     将 XML 文档保存到指定的位置

创建一下XML文件(xml文件的基本格式)

<root_CharacterTemplateData>  

<CharacterTemplateData id="0" name="xml">  

<JobID>1</JobID>    

<JobMode>none</JobMode>    

<InitForce>1.1</InitForce>  

</CharacterTemplateData>

</root_CharacterTemplateData>

常用操作

using UnityEngine;
using System.Collections;
using System.IO;
using System.Xml;

public class TestXML : MonoBehaviour {

	private string filePath;
	private int id;
	private int jobId;

	private void Start()
	{
//		filePath = Application.dataPath + "/Test.xml";
		filePath = Application.streamingAssetsPath + "/Test.xml";
	}

	/// <summary>	/// 创建XML文件	/// </summary>
	private void CreateXML()
	{
		//检查xml是否存在,如果没有文件则创建
		if(File.Exists(filePath)) return;
		//创建xml实例
		XmlDocument xmlDoc = new XmlDocument ();
		//创建根节点
		XmlElement root = xmlDoc.CreateElement("root_CharacterTemplateData");
		//创建一级子节点
		XmlElement elmNew = xmlDoc.CreateElement("CharacterTemplateData");
		//设置两个属性
		elmNew.SetAttribute("id","0");
		elmNew.SetAttribute ("name","xml");
		//创建二级节点
		XmlElement jobID = xmlDoc.CreateElement("JobID");
		//设置二级节点值
		jobID.InnerText = "1";
		//在一级节点中追加二级节点
		elmNew.AppendChild(jobID);
		XmlElement jobMode = xmlDoc.CreateElement ("JobMode");
		jobMode.InnerText = "none";
		elmNew.AppendChild (jobMode);
		XmlElement initForce = xmlDoc.CreateElement ("InitForce");
		initForce.InnerText = "1.1";
		elmNew.AppendChild (initForce);
		//在跟节点中追加一级节点
		root.AppendChild(elmNew);
		//在xml实例中追加根节点
		xmlDoc.AppendChild(root);
		//保存xml文件
		xmlDoc.Save(filePath);
	}

	/// <summary>	/// 追加XML数据	/// </summary>
	private void AddXML()
	{
		//检测文件是否存在
		if(!File.Exists(filePath)) return;
		//创建实例
		XmlDocument xmlDoc = new XmlDocument ();
		//查找根节点
		xmlDoc.Load(filePath);
		XmlNode root = xmlDoc.SelectSingleNode ("root_CharacterTemplateData");
		//添加节点
		XmlElement elmNew = xmlDoc.CreateElement("CharacterTemplateData");
		elmNew.SetAttribute ("id","1");
		elmNew.SetAttribute ("name","name1");
		XmlElement jobId = xmlDoc.CreateElement ("JobID");
		jobId.InnerText = "1";
		elmNew.AppendChild (jobId);
		XmlElement jobMode = xmlDoc.CreateElement ("JobMode");
		jobMode.InnerText = "none";
		elmNew.AppendChild (jobMode);
		XmlElement initForce = xmlDoc.CreateElement ("InitForce");
		initForce.InnerText = "2.2";
		elmNew.AppendChild (initForce);
		root.AppendChild (elmNew);
//		xmlDoc.AppendChild (root);
		xmlDoc.Save(filePath);
		//在根节点中添加所有新节点
		//保存XML文件
	}

	/// <summary>	/// 更新xml数据	/// </summary>
	private void UpdateXML()
	{
		//检测文件
		if(!File.Exists(filePath)) return;
		//读取实例
		XmlDocument xmlDoc = new XmlDocument ();
		xmlDoc.Load (filePath);
		//获取根节点下所有子节点
		XmlNodeList nodeList = 
			xmlDoc.SelectSingleNode("root_CharacterTemplateData").ChildNodes;
		//遍历所有子节点,节点名称为CharacterTemplateData并且属性id=0,修改属性
		foreach(XmlElement xe in nodeList)
		{
			if (xe.Name == "CharacterTemplateData" &&
			    xe.GetAttribute ("id") == "0") {
				xe.SetAttribute ("id","1000");
				//修改该节点的子节点,节点名称为JobID=2
				xe.SelectSingleNode("JobID").InnerText = "2";
			}
		}
		//保存
		xmlDoc.Save(filePath);
	}

	/// <summary>	/// 删除XML数据	/// </summary>
	private void DeleteXML()
	{
		if (!File.Exists (filePath))
			return;
		XmlDocument xmlDoc = new XmlDocument ();
		xmlDoc.Load (filePath);
		XmlNodeList nodeList = 
			xmlDoc.SelectSingleNode ("root_CharacterTemplateData").ChildNodes;
		foreach(XmlElement xe in nodeList)
		{
			if (xe.Name == "CharacterTemplateData" && 
				xe.GetAttribute ("id") == "1") {
				xe.RemoveAttribute ("id");
				xe.SelectSingleNode ("JobID").InnerText = "";
			}
		}
		xmlDoc.Save (filePath);
	}

	/// <summary>	/// 显示xml数据	/// </summary>
	private void ShowXML()
	{
		if (!File.Exists (filePath))
			return;
		XmlDocument xmlDoc = new XmlDocument ();
		xmlDoc.Load (filePath);
		XmlNodeList nodeList = 
			xmlDoc.SelectSingleNode ("root_CharacterTemplateData").ChildNodes;
		foreach(XmlElement xe in nodeList)
		{
			if (xe.Name == "CharacterTemplateData" &&
			   xe.GetAttribute ("id") == "1000") {
				id = int.Parse(xe.GetAttribute ("id"));
				jobId = int.Parse(xe.SelectSingleNode ("JobID").InnerText);
			}
		}
	}

	private void OnGUI()
	{
		if (GUI.Button (new Rect (100, 110, 200, 30), "CreateXML"))
			CreateXML ();
		if (GUI.Button (new Rect (100, 150, 200, 30), "AddXML"))
			AddXML ();
		if (GUI.Button (new Rect (100, 190, 200, 30), "UpdateXML"))
			UpdateXML ();
		if (GUI.Button (new Rect (100, 230, 200, 30), "DeleteXML"))
			DeleteXML ();
		if (GUI.Button (new Rect (100, 270, 200, 30), "ShowXML"))
			ShowXML ();
		GUILayout.Label ("id:" + id);
		GUILayout.Label ("jobid:" + jobId);
		GUILayout.Label ("filePath:" + filePath);
	}

}

移动端 数据存在于沙盒之中 没有真实的物理地址,

猜你喜欢

转载自blog.csdn.net/huanyu0127/article/details/108139154
今日推荐