XML与JSON在开发中非常重要, 其实核心就是处理字符串。一个是XML的字符串一个是JSON的字符串,尤其是在处理网络请求的时候,肯定是要用的。另外现在JSON非常的流行,我写了一个简单的例子融合了XML与JSON的合成与解析,希望大家喜欢!

 

首先注意头文件,LitJson是处理JSON的第三方库,最后我会给出下载地址。

1 using UnityEngine;
2 using System.Collections;
3 using System.Collections.Generic;
4 using System.Xml;
5 using System.IO;
6 using System.Text;
7 using LitJson;

 

 

1、生成XML

01 public void createXml()
02 {
03            //xml保存的路径,这里放在Assets路径 注意路径。
04     string filepath = Application.dataPath + @"/my.xml";
05            //继续判断当前路径下是否有该文件
06     if(!File.Exists (filepath))
07     {
08                      //创建XML文档实例
09          XmlDocument xmlDoc = new XmlDocument();
10                      //创建root节点,也就是最上一层节点
11          XmlElement root = xmlDoc.CreateElement("transforms");
12                       //继续创建下一层节点
13          XmlElement elmNew = xmlDoc.CreateElement("rotation");
14                     //设置节点的两个属性 ID 和 NAME
15          elmNew.SetAttribute("id","0");
16          elmNew.SetAttribute("name","momo");
17            //继续创建下一层节点
18              XmlElement rotation_X = xmlDoc.CreateElement("x");
19                  //设置节点中的数值
20                  rotation_X.InnerText = "0";
21                 XmlElement rotation_Y = xmlDoc.CreateElement("y");
22                 rotation_Y.InnerText = "1";
23                 XmlElement rotation_Z = xmlDoc.CreateElement("z");
24                  rotation_Z.InnerText = "2";
25                 //这里在添加一个节点属性,用来区分。。
26        rotation_Z.SetAttribute("id","1");
27
28          //把节点一层一层的添加至XMLDoc中 ,请仔细看它们之间的先后顺序,这将是生成XML文件的顺序
29          elmNew.AppendChild(rotation_X);
30          elmNew.AppendChild(rotation_Y);
31          elmNew.AppendChild(rotation_Z);
32      root.AppendChild(elmNew);
33          xmlDoc.AppendChild(root);
34          //把XML文件保存至本地
35          xmlDoc.Save(filepath);
36          Debug.Log("createXml OK!");
37     }
38 }

 

运行结果

1
2   "0" name="momo">
3     0
4     1
5     "1">2
6   
7

 

2.更新XML文件

以其中某个节点名称做条件,当查询到时更新该节点

01 public void UpdateXml()
02 {
03     string filepath = Application.dataPath + @"/my.xml";
04     if(File.Exists (filepath))
05     {
06          XmlDocument xmlDoc = new XmlDocument();
07                      //根据路径将XML读取出来
08          xmlDoc.Load(filepath);
09                      //得到transforms下的所有子节点
10          XmlNodeList nodeList=xmlDoc.SelectSingleNode("transforms").ChildNodes;
11                      //遍历所有子节点
12          foreach(XmlElement xe in nodeList)
13          {
14                             //拿到节点中属性ID =0的节点
15             if(xe.GetAttribute("id")=="0")
16             {
17                                     //更新节点属性
18                 xe.SetAttribute("id","1000");
19                                     //继续遍历
20                 foreach(XmlElement x1 in xe.ChildNodes)
21                 {
22                     if(x1.Name=="z")
23                     {
24                                                     //这里是修改节点名称对应的数值,而上面的拿到节点连带的属性。。。
25                          x1.InnerText="update00000";
26                     }
27
28                 }
29                 break;
30             }
31          }
32          xmlDoc.Save(filepath);
33          Debug.Log("UpdateXml OK!");
34     }
35
36 }

 

运行结果

1
2   "1000" name="momo">
3     0
4     1
5     "1">update00000
6   
7

 

3.添加XML

重复的地方我就不解释拉。

01 public void AddXml()
02 {
03     string filepath = Application.dataPath + @"/my.xml";
04     if(File.Exists (filepath))
05     {
06         XmlDocument xmlDoc = new XmlDocument();
07         xmlDoc.Load(filepath);
08         XmlNode root = xmlDoc.SelectSingleNode("transforms");
09         XmlElement elmNew = xmlDoc.CreateElement("rotation");
10         elmNew.SetAttribute("id","1");
11         elmNew.SetAttribute("name","yusong");
12
13          XmlElement rotation_X = xmlDoc.CreateElement("x");
14          rotation_X.InnerText = "0";
15          rotation_X.SetAttribute("id","1");
16          XmlElement rotation_Y = xmlDoc.CreateElement("y");
17          rotation_Y.InnerText = "1";
18          XmlElement rotation_Z = xmlDoc.CreateElement("z");
19          rotation_Z.InnerText = "2";
20
21          elmNew.AppendChild(rotation_X);
22          elmNew.AppendChild(rotation_Y);
23          elmNew.AppendChild(rotation_Z);
24          root.AppendChild(elmNew);
25          xmlDoc.AppendChild(root);
26          xmlDoc.Save(filepath);
27          Debug.Log("AddXml OK!");
28     }
29 }

 

运行结果

01
02   "1000" name="momo">
03     0
04     1
05     "1">update00000
06   
07   "1" name="yusong">
08     "1">0
09     1
10     2
11   
12

 

4.删除XML

01 public void deleteXml()
02 {
03     string filepath = Application.dataPath + @"/my.xml";
04     if(File.Exists (filepath))
05     {
06          XmlDocument xmlDoc = new XmlDocument();
07          xmlDoc.Load(filepath);
08          XmlNodeList nodeList=xmlDoc.SelectSingleNode("transforms").ChildNodes;
09          foreach(XmlElement xe in nodeList)
10          {
11             if(xe.GetAttribute("id")=="1")
12             {
13                 xe.RemoveAttribute("id");
14             }
15
16             foreach(XmlElement x1 in xe.ChildNodes)
17             {
18                 if(x1.Name == "z")
19                 {
20                     x1.RemoveAll();
21
22                 }
23             }
24          }
25          xmlDoc.Save(filepath);
26          Debug.Log("deleteXml OK!");
27     }
28
29 }

 

运行结果

01
02   "1000" name="momo">
03     0
04     1
05     
06     
07   
08   "yusong">
09     "1">0
10     1
11     
12     
13   
14

 

4.解析与输出上面的XML

01 public void showXml()
02 {
03     string filepath = Application.dataPath + @"/my.xml";
04     if(File.Exists (filepath))
05     {
06          XmlDocument xmlDoc = new XmlDocument();
07          xmlDoc.Load(filepath);
08          XmlNodeList nodeList=xmlDoc.SelectSingleNode("transforms").ChildNodes;
09         //遍历每一个节点,拿节点的属性以及节点的内容
10          foreach(XmlElement xe in nodeList)
11