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中对应的内容将会改变