XML的使用,增刪改查(Unity中的)
阿新 • • 發佈:2019-02-12
建立之後的XML
建立程式碼:<root_CharacterTmp> <CharacterTmp id="1000" name="xml"> <JobID>2</JobID> <JobMode>none</JobMode> <InitForce>2.2</InitForce> </CharacterTmp> <CharacterTmp name="name1"> <JobID> </JobID> <JobMode>none</JobMode> <InitForce>2.2</InitForce> </CharacterTmp> </root_CharacterTmp>
using UnityEngine; using System.Collections; using System.Xml; using System.IO; public class XmlTest : MonoBehaviour { string filePath; int id; int jobID; string jobMode; float initForce; void Start () { filePath = Application.dataPath + "/Test.xml"; } void OnGUI() { if (GUI.Button (new Rect (10, 10, 200, 30), "CREATE XML")) CreateXMl (); if (GUI.Button (new Rect (10, 50, 200, 30), "UpDate XML")) UpDateXml (); if (GUI.Button (new Rect (10, 90, 200, 30), "Add XML")) AddXml (); if (GUI.Button (new Rect (10, 130, 200, 30), "Delete XML")) DeleteXml (); if (GUI.Button (new Rect (10, 170, 200, 30), "Delete XML")) ShowXml (); GUILayout.Label ("id:" + id); } //建立XML public void CreateXMl() { //檢測xml是否存在 if(!File.Exists(filePath)) { //新建XML例項 XmlDocument xmlDoc = new XmlDocument(); //建立根節點 XmlElement root = xmlDoc.CreateElement("root_CharacterTmp"); //建立下一層節點 XmlElement elmNew = xmlDoc.CreateElement("CharacterTmp"); //設定屬性 elmNew.SetAttribute("id","0"); elmNew.SetAttribute("name","xml"); //繼續建立下一層節點 XmlElement jobid = xmlDoc.CreateElement("JobID"); //設定節點的值 jobid.InnerText = "1"; XmlElement jobMode = xmlDoc.CreateElement("JobMode"); jobMode.InnerText = "none"; XmlElement initForce = xmlDoc.CreateElement("InitForce"); initForce.InnerText = "0"; //吧節點一層一層的新增 elmNew.AppendChild(jobid); elmNew.AppendChild(jobMode); elmNew.AppendChild(initForce); root.AppendChild(elmNew); xmlDoc.AppendChild(root); xmlDoc.Save(filePath); Debug.Log("createXml ok!"); } } //更新XML public void UpDateXml() { //檢測xml是否存在 if(File.Exists(filePath)) { //新建例項 XmlDocument xmlDoc = new XmlDocument(); //根據路徑將xml讀取出來 xmlDoc.Load(filePath); //得到根節點 XmlNodeList nodeList = xmlDoc.SelectSingleNode ("root_CharacterTmp").ChildNodes; //遍歷所有子節點 foreach(XmlElement xe in nodeList) { //拿到節點中屬性 id == 0的節點 if(xe.GetAttribute("id") == "0") { //更新節點屬性 xe.SetAttribute("id", "1000"); //繼續遍歷 foreach(XmlElement x1 in xe.ChildNodes) { if(x1.Name == "JobID") { //更新值 x1.InnerText = "2"; } } } } xmlDoc.Save(filePath); Debug.Log("UpDateXML OK!"); } } //新增xml public void AddXml() { if(File.Exists(filePath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); //新增根節點 XmlNode root = xmlDoc.SelectSingleNode ("root_CharacterTmp"); //新增 XmlElement elmNew = xmlDoc.CreateElement("CharacterTmp"); 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); Debug.Log("AddXml OK!"); } } //刪除XML public void DeleteXml() { if(File.Exists(filePath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); XmlNodeList nodeList = xmlDoc.SelectSingleNode ("root_CharacterTmp").ChildNodes; foreach(XmlElement xe in nodeList) { if(xe.GetAttribute("id") == "1") { xe.RemoveAttribute("id"); foreach(XmlElement x1 in xe.ChildNodes) { if(x1.Name == "JobID") { x1.RemoveAll(); } } } } xmlDoc.Save(filePath); Debug.Log("deleteXml OK!"); } } //解析xml public void ShowXml() { if(File.Exists(filePath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); XmlNodeList nodeList = xmlDoc.SelectSingleNode ("root_CharacterTmp").ChildNodes; foreach(XmlElement xe in nodeList) { if(xe.GetAttribute("id") == "1000") { id = int.Parse(xe.GetAttribute("id")); Debug.Log("id:" + id); foreach(XmlElement x1 in xe.ChildNodes) { switch(x1.Name) { case "JobID": jobID = int.Parse(x1.InnerText); Debug.Log("jobID:" + jobID); break; case "JobMode" : jobMode = x1.InnerText; Debug.Log("jobMode:" + jobMode); break; case "InitForce": initForce = float.Parse(x1.InnerText); Debug.Log("initForce:" + initForce); break; default: break; } } } } } } }