XML即可标记语言,是一种用于标记电子文件使其具有结构性的标记语言,在计算机中,标记是指计算机能理解的信息符号,通过此种符号,计算机可以从处理包含各种信息的数据,可以用来标记数据、定义数据结构,是一种用户对自己的标记语言进行定义的源语言
1:写入XML数据
写入XML数据,要思考清楚节点的内容,然后把节点一层一层的添加到XML中,要注意它们之间的先后顺序,它们之间的先后顺序就是生成的XML文件的先后顺序,下面实例演示
using System.IO; using System.Xml; using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test_15_5 : MonoBehaviour { void Start() { CreateXML(); } void CreateXML() { string path = @"c:\Temp\jsonInfo.xml"; //创建XML实例对象 XmlDocument xml = new XmlDocument(); //创建根节点 XmlElement root = xml.CreateElement("Data"); //创建子节点 XmlElement element = xml.CreateElement("Person");//设置子节点的名字 element.SetAttribute("id", "1");//设置子节点的属性 //设置节点内面的内容 XmlElement elementChild1 = xml.CreateElement("Name"); elementChild1.InnerText = "张三"; XmlElement elementChild2 = xml.CreateElement("Grade"); elementChild2.InnerText = "96"; //将内容添加到子节点 element.AppendChild(elementChild1); element.AppendChild(elementChild2); //将子节点添加到根节点 root.AppendChild(element); //创建子节点 XmlElement element2 = xml.CreateElement("Person");//设置子节点的名字 element2.SetAttribute("id", "2");//设置子节点的属性 //设置节点内面的内容 XmlElement elementChild3 = xml.CreateElement("Name"); elementChild3.InnerText = "李四"; XmlElement elementChild4 = xml.CreateElement("Grade"); elementChild4.InnerText = "98"; //将内容添加到子节点 element2.AppendChild(elementChild3); element2.AppendChild(elementChild4); //将子节点添加到根节点 root.AppendChild(element2); //将根节点添加到XML实例对象中 xml.AppendChild(root); //最后保存文件 xml.Save(path); } }
2:读取XML数据
读取XML数据,也是根据节点一层一层的读取数据,如生成的XML文件,最外层是Data,就要先读取Data,然后以Data为根节点读取子节点Person,然后根据子节点Person读取下一层节点的数据。
using System.IO; using System.Xml; using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test_15_6 : MonoBehaviour { void Start() { ReadXML(); } //读取XML void ReadXML() { //创建xml文档 XmlDocument xml = new XmlDocument(); xml.Load(@"c:\Temp\jsonInfo.xml"); //得到Data节点下的所有子节点 XmlNodeList xmlNodeList = xml.SelectSingleNode("Data").ChildNodes; //遍历所有子节点 foreach (XmlElement item in xmlNodeList) { if (item.GetAttribute("id") == "1") { //继续遍历id为1的节点下的子节点 foreach (XmlElement itemChild in item.ChildNodes) { if (itemChild.Name == "Name") { Debug.Log(itemChild.InnerText); } else if (itemChild.Name == "Grade") { Debug.Log(itemChild.InnerText); } } } if (item.GetAttribute("id") == "2") { //继续遍历id为2的节点下的子节点 foreach (XmlElement itemChild in item.ChildNodes) { if (itemChild.Name == "Name") { Debug.Log(itemChild.InnerText); } else if (itemChild.Name == "Grade") { Debug.Log(itemChild.InnerText); } } } } } }
3:修改XML数据
修改XML数据也是同样的道理,需要根据节点一层一层的找到数据,然后进行修改,下面的实例演示了如何修改XML数据
using System.IO; using System.Xml; using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test_15_7 : MonoBehaviour { void Start() { UpdateXML(); } //修改XML void UpdateXML() { string path = @"c:\Temp\jsonInfo.xml"; if (File.Exists(path)) { XmlDocument xml = new XmlDocument(); xml.Load(path); XmlNodeList xmlNodeList = xml.SelectSingleNode("Data").ChildNodes; foreach (XmlElement item in xmlNodeList) { if (item.GetAttribute("id") == "1") { //把Person里id为1的属性改为5 item.SetAttribute("id", "5"); } if (item.GetAttribute("id") == "2") { foreach (XmlElement itemChild in item.ChildNodes) { if (itemChild.Name == "Name") { itemChild.InnerText = "王五"; } else if (itemChild.Name == "Grade") { itemChild.InnerText = "0"; } } } } xml.Save(path); } } }
编译和执行代码后,xml中对应的内容将会改变