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 }
今天在工作之余学习了一下关于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 }