1.先介紹一下 XML 和 JSON 是什麼東西吧?html
(1)XMLjson
擴展標記語言 (Extensible Markup Language, XML) ,用於標記電子文件使其具備結構性的標記語言,能夠用來標記數據、定義數據類型,是一種容許用戶對本身的標記語言進 行定義的源語言。 XML使用DTD(document type definition)文檔類型定義來組織數據;格式統一,跨平臺和語言,早已成爲業界公認的標準。
XML是標準通用標記語言 (SGML) 的子集,很是適合 Web 傳輸。XML 提供統一的方法來描述和交換獨立於應用程序或供應商的結構化數據。數組
(2)Json服務器
JSON(JavaScript Object Notation)一種輕量級的數據交換格式,具備良好的可讀和便於快速編寫的特性。可在不一樣平臺之間進行數據交換。JSON採用兼容性很高的、徹底獨立於語言文本格式,同時也具有相似於C語言的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)體系的行爲。這些特性使JSON成爲理想的數據交換語言。app
說了那麼多,其實就是數據的兩種保存格式。主要用於配置文件,描述數據,存儲數據,數據傳輸等等。ui
2.由於Xml和Json均可以辦到這些事情,那麼它們之間有什麼區別麼?各自的優缺點?spa
(1)XMLcode
優勢:格式統一,符合標準;.容易與其餘系統進行遠程交互,數據共享比較方便。xml
缺點:XML文件龐大,文件格式複雜,傳輸佔帶寬;服務器端和客戶端解析XML花費較多的資源和時間;須要花費大量代碼來解析XML;htm
(2)Json
優勢:數據格式比較簡單,易於讀寫,格式都是壓縮的,佔用帶寬小;.支持多種語言;
缺點:可讀性較xml略差;
總而言之,二者能夠相互轉換,功能都是相差無幾的。可是json比xml較好,但xml更加通用。
3.XML使用的簡單介紹.
a.先來看一段簡單的xml代碼。
-
<team name="Dreamer">
-
<student>
-
<name>Tom</name>
-
<age>20</age>
-
<id>20111234</id>
-
</student>
-
<student>
-
<name>Shierly</name>
-
<age>19</age>
-
<id>20113210</id>
-
</student>
-
<student>
-
<name>Lili</name>
-
<age>21</age>
-
<id>20111110</id>
-
</student>
-
</team>
很顯然,能夠看出來,這段代碼描述的是一個名叫Dreamer的團隊有三個成員,還分別記錄了這三個成員的相關信息。因此能夠看出來XML的可讀性十分強。因此咱們能夠用XML去描述 咱們代碼中的一些數據關係,描述一個對象。這也就是將對象序列化。而後使用的地方再將xml文件解析出來從新組成原來的對象,這就實現了複雜數據的傳輸。
-
public void CreateXML()
-
{
-
-
//xml保存的路徑,注意路徑。
-
string filepath = "E:/my.xml";
-
//繼續判斷當前路徑下是否有該文件
-
if(!File.Exists (filepath))
-
{
-
//建立XML文檔實例
-
XmlDocument xmlDoc = new XmlDocument();
-
//建立root節點,也就是最上一層節點
-
XmlElement root = xmlDoc.CreateElement( "team");
-
root.SetAttribute( "name", "Dreamer");
-
//繼續建立下一層節點
-
XmlElement student = xmlDoc.CreateElement( "student");
-
-
//繼續建立下一層節點
-
XmlElement name = xmlDoc.CreateElement( "name");
-
//設置節點中的數值
-
name.InnerText = "Tom";
-
XmlElement age = xmlDoc.CreateElement( "age");
-
age.InnerText = "20";
-
XmlElement id = xmlDoc.CreateElement( "id");
-
id.InnerText = "20111234";
-
-
//把節點一層一層的添加至XMLDoc中 ,請仔細看它們之間的前後順序,這將是生成XML文件的順序
-
student.AppendChild(name);
-
student.AppendChild(age);
-
student.AppendChild(id);
-
root.AppendChild(student);
-
-
student = xmlDoc.CreateElement( "student");
-
name = xmlDoc.CreateElement( "name");
-
name.InnerText = "Shierly";
-
age = xmlDoc.CreateElement( "age");
-
age.InnerText = "19";
-
id = xmlDoc.CreateElement( "id");
-
id.InnerText = "20113210";
-
student.AppendChild(name);
-
student.AppendChild(age);
-
student.AppendChild(id);
-
root.AppendChild(student);
-
-
student = xmlDoc.CreateElement( "student");
-
name = xmlDoc.CreateElement( "name");
-
name.InnerText = "Lili";
-
age = xmlDoc.CreateElement( "age");
-
age.InnerText = "21";
-
id = xmlDoc.CreateElement( "id");
-
id.InnerText = "20111110";
-
student.AppendChild(name);
-
student.AppendChild(age);
-
student.AppendChild(id);
-
root.AppendChild(student);
-
-
xmlDoc.AppendChild(root);
-
//把XML文件保存至本地
-
xmlDoc.Save(filepath);
-
}
-
-
}
-
public void UpdateXml()
-
{
-
string filepath = "E:/my.xml";
-
if (File.Exists(filepath))
-
{
-
XmlDocument xmlDoc = new XmlDocument();
-
//根據路徑將XML讀取出來
-
xmlDoc.Load(filepath);
-
//獲得team下的全部student節點.
-
XmlNodeList studentlist = xmlDoc.SelectSingleNode( "team").ChildNodes;
-
//遍歷全部子節點
-
foreach (XmlElement student in studentlist)
-
{
-
-
XmlNode name = student.SelectSingleNode( "name");
-
if (name.InnerText.Equals("Lili"))
-
{
-
name.InnerText = "Jack";
-
}
-
}
-
xmlDoc.Save(filepath);
-
}
-
}
-
<team name="Dreamer">
-
<student>
-
<name>Tom</name>
-
<age>20</age>
-
<id>20111234</id>
-
</student>
-
<student>
-
<name>Shierly</name>
-
<age>19</age>
-
<id>20113210</id>
-
</student>
-
<student>
-
<name>Jack</name>
-
<age>21</age>
-
<id>20111110</id>
-
</student>
-
</team>
-
public void InsertXml()
-
{
-
string filepath = "E:/my.xml";
-
if (File.Exists(filepath))
-
{
-
XmlDocument xmlDoc = new XmlDocument();
-
//根據路徑將XML讀取出來
-
xmlDoc.Load(filepath);
-
-
XmlNode team = xmlDoc.SelectSingleNode( "team");
-
XmlElement newstudent = xmlDoc.CreateElement( "student");
-
-
XmlElement name = xmlDoc.CreateElement( "name");
-
name.InnerText = "Sharo";
-
-
XmlElement age = xmlDoc.CreateElement( "age");
-
age.InnerText = "22";
-
-
XmlElement id = xmlDoc.CreateElement( "id");
-
id.InnerText = "20112312";
-
//向新隊員添加屬性
-
newstudent.AppendChild(name);
-
newstudent.AppendChild(age);
-
newstudent.AppendChild(id);
-
//將新隊員添加到團隊裏面
-
team.AppendChild(newstudent);
-
-
xmlDoc.Save(filepath);
-
}
-
}
-
<team name="Dreamer">
-
<student>
-
<name>Tom</name>
-
<age>20</age>
-
<id>20111234</id>
-
</student>
-
<student>
-
<name>Shierly</name>
-
<age>19</age>
-
<id>20113210</id>
-
</student>
-
<student>
-
<name>Jack</name>
-
<age>21</age>
-
<id>20111110</id>
-
</student>
-
<student>
-
<name>Sharo</name>
-
<age>22</age>
-
<id>20112312</id>
-
</student>
-
</team>
-
public void DeleteXml()
-
{
-
string filepath = "E:/my.xml";
-
if (File.Exists(filepath))
-
{
-
XmlDocument xmlDoc = new XmlDocument();
-
//根據路徑將XML讀取出來
-
xmlDoc.Load(filepath);
-
-
XmlNode team = xmlDoc.SelectSingleNode( "team");
-
XmlNodeList studentlist = team.ChildNodes;
-
-
foreach(XmlNode student in studentlist)
-
{
-
XmlNode name = student.SelectSingleNode( "name");
-
if(name.InnerText.Equals("Tom"))
-
{
-
team.RemoveChild(student);
-
}
-
}
-
-
xmlDoc.Save(filepath);
-
}
-
}
-
<team name="Dreamer">
-
<student>
-
<name>Shierly</name>
-
<age>19</age>
-
<id>20113210</id>
-
</student>
-
<student>
-
<name>Jack</name>
-
<age>21</age>
-
<id>20111110</id>
-
</student>
-
<student>
-
<name>Sharo</name>
-
<age>22</age>
-
<id>20112312</id>
-
</student>
-
</team>
-
public void LoadXml()
-
{
-
string filepath = "E:/my.xml";
-
if (File.Exists(filepath))
-
{
-
XmlDocument xmlDoc = new XmlDocument();
-
//根據路徑將XML讀取出來
-
xmlDoc.Load(filepath);
-
-
XmlElement team = (XmlElement)xmlDoc.SelectSingleNode( "team");
-
string teamname = team.GetAttribute("name");
-
-
Console.WriteLine( "這是一個名叫\"" + teamname + "\"的隊伍:");
-
XmlNodeList studentlist = team.ChildNodes;
-
Console.WriteLine( "一共有" + studentlist.Count + "人");
-
foreach (XmlNode student in studentlist)
-
{
-
XmlNode name = student.SelectSingleNode( "name");
-
XmlNode age = student.SelectSingleNode( "age");
-
XmlNode id = student.SelectSingleNode( "id");
-
Console.WriteLine( "姓名:" + name.InnerText + ",年齡:" + age.InnerText + ",學號:" + id.InnerText);
-
}
-
-
xmlDoc.Save(filepath);
-
}
-
}
-
這是一個名叫 "Dreamer"的隊伍:
-
一共有 3人
-
姓名:Shierly,年齡: 19,學號:20113210
-
姓名:Jack,年齡: 21,學號:20111110
-
姓名:Sharo,年齡: 22,學號:20112312
-
{
-
"Name" : "Dreamer",
-
"Number" : 3,
-
"Member" :
-
[
-
{
-
"Name" : "Tom",
-
"Age" : 20,
-
"Id" : "20111234"
-
},
-
{
-
"Name" : "Jack",
-
"Age" : 22,
-
"Id" : "20112312"
-
}
-
]
-
}
-
public void CreateJson()
-
{
-
string path = "E:/json.txt";
-
FileInfo t = new FileInfo(path);
-
-
StreamWriter sw = t.CreateText();
-
-
StringBuilder sb = new StringBuilder();
-
JsonWriter writer = new JsonWriter(sb);
-
//至關於寫下了'{'
-
writer.WriteObjectStart();
-
//至關於寫下了"Name":
-
writer.WritePropertyName( "Name");
-
//至關於寫下了"Dreamer"
-
writer.Write( "Dreamer");
-
-
writer.WritePropertyName( "Number");
-
writer.Write( "3");
-
-
writer.WritePropertyName( "Member");
-
//至關於寫下了'['
-
writer.WriteArrayStart();
-
-
writer.WriteObjectStart();
-
writer.WritePropertyName( "Name");
-
writer.Write( "Tom");
-
writer.WritePropertyName( "Age");
-
writer.Write( "20");
-
writer.WritePropertyName( "Id");
-
writer.Write( "20111234");
-
//至關於寫下了'}'
-
writer.WriteObjectEnd();
-
-
writer.WriteObjectStart();
-
writer.WritePropertyName( "Name");
-
writer.Write( "Jack");
-
writer.WritePropertyName( "Age");
-
writer.Write( "22");
-
writer.WritePropertyName( "Id");
-
writer.Write( "20112312");
-
writer.WriteObjectEnd();
-
//至關於寫下了']'
-
writer.WriteArrayEnd();
-
writer.WriteObjectEnd();
-
sw.WriteLine(sb.ToString());
-
sw.Close();
-
}
-
using UnityEngine;
-
using LitJson;
-
public class A
-
{
-
public string name = "yzl";
-
public int old = 20;
-
}
-
public class Test : MonoBehaviour
-
{
-
void Start()
-
{
-
A a = new A();
-
Debug.Log(JsonMapper.ToJson(a));
-
}
-
}
-
using UnityEngine;
-
using System.Collections;
-
using System;
-
using System.Collections.Generic;
-
using LitJson;
-
using System.IO;
-
public class Test : MonoBehaviour
-
{
-
void Start()
-
{
-
StreamReader sr = File.OpenText( "E:/json.txt");
-
string strline = sr.ReadToEnd();
-
-
JsonData jd = JsonMapper.ToObject(strline);
-
-
//修改隊名
-
jd[ "Name"] = "Winer";
-
//添加隊伍地址屬性
-
jd[ "Address"] = "Sichuan";
-
//刪除隊伍人數屬性
-
((IDictionary)jd).Remove( "Number");
-
Debug.Log(jd.ToJson());
-
-
sr.Close();
-
}
-
}
-
using UnityEngine;
-
using System.Collections;
-
using System;
-
using System.Collections.Generic;
-
using LitJson;
-
using System.IO;
-
-
public class Test : MonoBehaviour
-
{
-
void Start()
-
{
-
StreamReader sr = File.OpenText( "E:/json.txt");
-
string strline = sr.ReadToEnd();
-
-
JsonData jd = JsonMapper.ToObject(strline);
-
-
Debug.Log( "隊伍名:" + jd["Name"]);
-
Debug.Log( "隊伍人數:" + jd["Number"]);
-
-
for (int i = 0; i < jd["Member"].Count; i++)
-
{
-
Debug.Log( "姓名:" + jd["Member"][i]["Name"] + ",年齡:" + jd["Member"][i]["Age"] + ",學號:" + jd["Member"][i]["Id"]);
-
}
-
sr.Close();
-
}
-
}
隊伍名:Dreamer 隊伍人數:3 姓名:Tom,年齡:20,學號:20111234 姓名:Jack,年齡:22,學號:20112312