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