原文:http://blog.csdn.net/y1196645376/article/details/52541882
1.先介绍一下 XML 和 JSON 是什么东西吧?
(1)XML
扩展标记语言 (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成为理想的数据交换语言。
说了那么多,其实就是数据的两种保存格式。主要用于配置文件,描述数据,存储数据,数据传输等等。
2.因为Xml和Json都可以办到这些事情,那么它们之间有什么区别么?各自的优缺点?
(1)XML
优点:格式统一,符合标准;.容易与其他系统进行远程交互,数据共享比较方便。
缺点:XML文件庞大,文件格式复杂,传输占带宽;服务器端和客户端解析XML花费较多的资源和时间;需要花费大量代码来解析XML;
(2)Json
优点:数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;.支持多种语言;
缺点:可读性较xml略差;
总而言之,两者可以相互转换,功能都是相差无几的。但是json比xml较好,但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>
- 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