Unity3D_08_XML文件創建,讀取,修改,添加


今天在工作之余學習了一下關於Unity中關於XML的部分。 
在這里要注意添加兩個命名空間,如下:

一、xml的解析

首先新建一個xml,可以命名為item.xml,拖進assets里面,內容如下:

 1 <item>
 2   <item1>
 3     <id>1</id>
 4     <name>china</name>
 5     <year>2016</year>
 6   </item1>
 7   <item2>
 8     <id>2</id>
 9     <name>usa</name>
10     <year>2017</year>
11   </item2>
12 </item>

通過這個xml來解析。然后寫一個.cs文件,注意需要導入這兩個頭文件

1 using System.Xml;     //xml操作
2 using System.IO;     //file操作

一個是對XML文件的命名空間,里面有關xml的很多api; 
一個是對文件讀寫的命名空間,是對文件的讀取,保存操作;

解析函數如下:

 1 //解析xml
 2     void parseXml(){
 3         //也可以前面加上@,區別就是有@的話,雙引號里面的內容不轉義,比如" \" "
 4         //string filePath = Application.dataPath+@"/Resources/item.xml";
 5         string filePath = Application.dataPath+"/Resources/item.xml";
 6         if(File.Exists(filePath)){
 7             XmlDocument xmlDoc = new XmlDocument();
 8             xmlDoc.Load(filePath);
 9             XmlNodeList node = xmlDoc.SelectSingleNode("item").ChildNodes;
10             //遍歷節點
11             foreach(XmlElement ele in node){
12                 //item下面的節點
13                 Debug.Log(ele.Name);
14 
15                 if(ele.Name == "item1"){
16                 //first item1
17                     foreach(XmlElement i1 in ele.ChildNodes){
18                         Debug.Log(i1.Name);
19                         if(i1.Name == "id"){
20                             id1 = i1.InnerText;
21                         }
22                         if(i1.Name == "name"){
23                             name1 = i1.InnerText;
24                         }
25                         if(i1.Name=="year"){
26                             year1 = i1.InnerText;
27                         }
28                     }
29                 }
30                 if(ele.Name == "item2"){
31                     //first item1
32                     foreach(XmlElement i2 in ele.ChildNodes){
33                         Debug.Log(i2.Name);
34                         if(i2.Name == "id"){
35                             id2 = i2.InnerText;
36                         }
37                         if(i2.Name == "name"){
38                             name2 = i2.InnerText;
39                         }
40                         if(i2.Name=="year"){
41                             year2 = i2.InnerText;
42                         }
43                     }
44                 }
45 
46             }
47         }
48         Debug.Log("id1:  "+id1);
49         Debug.Log("name1:  "+name1);
50         Debug.Log("year1:  "+year1);
51         Debug.Log("id2:  "+id2);
52         Debug.Log("name2:  "+name2);
53         Debug.Log("year2:  "+year2);
54     }

通過解析即可得到xml的值 
這里寫圖片描述

后面的增刪改其實不怎么用,因為一般都是策划直接修改表,而不用代碼修改,但是還是可以看看。

二:XML文件創建、讀取、修改、添加

代碼如下:

  1 using UnityEngine;
  2 using System.Collections;
  3 using System.Xml;
  4 using System.IO;
  5 
  6 public class XMLDemo : MonoBehaviour {
  7     private ArrayList Adialogue = new ArrayList();
  8     private ArrayList Bdialogue = new ArrayList();
  9     private ArrayList textList = new ArrayList();
 10     // Use this for initialization
 11     void Start () {
 12 
 13 
 14     }
 15 
 16     // Update is called once per frame
 17     void Update () {
 18 
 19     }
 20 
 21     void OnGUI() {
 22         if (GUI.Button(new Rect(50, 50, 100, 50), "生成XML"))
 23         {
 24             CreateXML();
 25             Debug.Log("生成XML");
 26         }
 27 
 28         if (GUI.Button(new Rect(50, 100, 100, 50), "讀取XML"))
 29         {
 30             LoadXml();
 31             Debug.Log("讀取XML");
 32         }
 33 
 34         if (GUI.Button(new Rect(50, 150, 100, 50), "修改XML"))
 35         {
 36             updateXML();
 37             Debug.Log("修改XML");
 38 
 39         }
 40 
 41         if (GUI.Button(new Rect(50, 200, 100, 50), "增加XML節點"))
 42         {
 43             addXMLData();
 44             Debug.Log("增加XML");
 45         }
 46     }
 47 
 48 //創建XML
 49  void CreateXML()
 50     {
 51         string path = Application.dataPath + "/data2.xml";
 52         if (!File.Exists(path))
 53         {
 54             //創建最上一層的節點。
 55             XmlDocument xml = new XmlDocument();
 56             //創建最上一層的節點。
 57             XmlElement root = xml.CreateElement("objects");
 58             //創建子節點
 59             XmlElement element = xml.CreateElement("messages");
 60             //設置節點的屬性
 61             element.SetAttribute("id", "1");
 62             XmlElement elementChild1 = xml.CreateElement("contents");
 63 
 64             elementChild1.SetAttribute("name", "a");
 65             //設置節點內面的內容
 66             elementChild1.InnerText = "這就是你,你就是天狼";
 67             XmlElement elementChild2 = xml.CreateElement("mission");
 68             elementChild2.SetAttribute("map", "abc");
 69             elementChild2.InnerText = "去吧,少年,去實現你的夢想";
 70             //把節點一層一層的添加至xml中,注意他們之間的先后順序,這是生成XML文件的順序
 71             element.AppendChild(elementChild1);
 72             element.AppendChild(elementChild2);
 73             root.AppendChild(element);
 74             xml.AppendChild(root);
 75             //最后保存文件
 76             xml.Save(path);
 77         }
 78     }
 79 
 80 //讀取XML
 81  void LoadXml()
 82     {
 83         //創建xml文檔
 84         XmlDocument xml = new XmlDocument();
 85 
 86         xml.Load(Application.dataPath + "/data2.xml");
 87         //得到objects節點下的所有子節點
 88         XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
 89         //遍歷所有子節點
 90         foreach (XmlElement xl1 in xmlNodeList)
 91         {
 92 
 93             if (xl1.GetAttribute("id") == "1")
 94             {
 95                 //繼續遍歷id為1的節點下的子節點
 96                 foreach (XmlElement xl2 in xl1.ChildNodes)
 97                 {
 98                     //放到一個textlist文本里
 99                     //textList.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
100                     //得到name為a的節點里的內容。放到TextList里
101                     if (xl2.GetAttribute("name") == "a")
102                     {
103                         Adialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
104                         print("******************"+ xl2.GetAttribute("name") + ": " + xl2.InnerText);
105                     }
106                     //得到name為b的節點里的內容。放到TextList里
107                     else if (xl2.GetAttribute("map") == "abc")
108                     {
109                         Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
110                         print("******************" + xl2.GetAttribute("name") + ": " + xl2.InnerText);
111                     }
112                 }
113             }
114         }
115         print(xml.OuterXml);
116     }
117 
118 //修改XML
119     void updateXML()
120     {
121         string path = Application.dataPath + "/data2.xml";
122         if (File.Exists(path))
123         {
124             XmlDocument xml = new XmlDocument();
125             xml.Load(path);
126             XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
127             foreach (XmlElement xl1 in xmlNodeList)
128             {
129                 if (xl1.GetAttribute("id") == "1")
130                 {
131                     //把messages里id為1的屬性改為5
132                     xl1.SetAttribute("id", "5");
133                 }
134 
135                 if (xl1.GetAttribute("id") == "2")
136                 {
137                     foreach (XmlElement xl2 in xl1.ChildNodes)
138                     {
139                         if (xl2.GetAttribute("map") == "abc")
140                         {
141                             //把mission里map為abc的屬性改為df,並修改其里面的內容
142                             xl2.SetAttribute("map", "df");
143                             xl2.InnerText = "我成功改變了你";
144                         }
145 
146                     }
147                 }
148             }
149             xml.Save(path);
150         }
151     }
152 
153 //添加XML
154     void addXMLData()
155     {
156         string path = Application.dataPath + "/data2.xml";
157         if (File.Exists(path))
158         {
159             XmlDocument xml = new XmlDocument();
160             xml.Load(path);
161             XmlNode root = xml.SelectSingleNode("objects");
162             //下面的東西就跟上面創建xml元素是一樣的。我們把他復制過來就行了
163             XmlElement element = xml.CreateElement("messages");
164             //設置節點的屬性
165             element.SetAttribute("id", "2");
166             XmlElement elementChild1 = xml.CreateElement("contents");
167 
168             elementChild1.SetAttribute("name", "b");
169             //設置節點內面的內容
170             elementChild1.InnerText = "天狼,你的夢想就是。。。。。";
171             XmlElement elementChild2 = xml.CreateElement("mission");
172             elementChild2.SetAttribute("map", "def");
173             elementChild2.InnerText = "我要妹子。。。。。。。。。。";
174             //把節點一層一層的添加至xml中,注意他們之間的先后順序,這是生成XML文件的順序
175             element.AppendChild(elementChild1);
176             element.AppendChild(elementChild2);
177 
178             root.AppendChild(element);
179 
180             xml.AppendChild(root);
181             //最后保存文件
182             xml.Save(path);
183         }
184     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM