Unity 对XML文件进行创建、增、删、更新、读取操作,非常简单。
using System.IO;
using System.Xml;
using UnityEngine;
public class StudentData
{
public int num;
public string name;
public string sex;
public int student_num;
public float score;
}
public class XMLTest : MonoBehaviour
{
public string path;
void OnGUI()
{
if (GUI.Button(new Rect(50, 50, 100, 50), "生成数据"))
{
CreateXML();
Debug.Log("生成【钱二】的数据");
}
if (GUI.Button(new Rect(50, 100, 100, 50), "添加数据"))
{
AddXMLData(1, "赵一", 1, 100001, 90);
Debug.Log("添加【赵一】的数据");
}
if (GUI.Button(new Rect(50, 150, 100, 50), "读取数据"))
{
LoadXml();
Debug.Log("读取了【赵一】的数据,详情见 Debug");
}
if (GUI.Button(new Rect(50, 200, 100, 50), "更新数据"))
{
UpdateXML("赵一", 99.9f);
Debug.Log("修改了【赵一】的分数为99.9");
}
if (GUI.Button(new Rect(50, 250, 100, 50), "删除数据"))
{
DeleteXml("赵一");
Debug.Log("删除了名字叫【赵一】的数据");
}
}
/// <summary>
/// 添加输入固定格式
/// 暂时没有用到
/// </summary>
/// <param name="num"></param>
/// <param name="name"></param>
/// <param name="sex"></param>
/// <param name="student_num"></param>
/// <param name="score"></param>
//void AddData(int num, string name, int sex, int student_num, float score)
//{
// StudentData data = new StudentData();
// data.num = num;
// data.name = name;
// if (sex == 1)
// data.sex = "男";
// if (sex == 0)
// data.sex = "女";
// data.student_num = student_num;
// data.score = score;
//}
/// <summary>
/// 创建xml文件
/// </summary>
private void CreateXML()
{
path = Application.dataPath + "/data.xml";
if (!File.Exists(path))
{
XmlDocument xml = new XmlDocument();//创建文件
XmlDeclaration declaration = xml.CreateXmlDeclaration("1.0", "UTF-8", null);//设置格式
XmlElement root = xml.CreateElement("Data");//根节点
XmlElement info = xml.CreateElement("Info");//子节点
//创建子节点属性名和属性值
info.SetAttribute("序号", "2");
info.SetAttribute("姓名", "钱二");
info.SetAttribute("性别", "男");
info.SetAttribute("学号", "100002");
info.SetAttribute("分数", "91");
root.AppendChild(info);
xml.AppendChild(root);//设置根节点
xml.Save(path);//保存
}
}
/// <summary>
/// 写入数据 添加
/// </summary>
private void AddXMLData(int num, string name, int sex, int student_num, float score)
{
path = Application.dataPath + "/data.xml";
if (File.Exists(path))
{
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNode root = xml.SelectSingleNode("Data");//获取根节点
XmlElement info = xml.CreateElement("Info");//创建新的子节点
//--------------------------------------------------------
StudentData data = new StudentData();
data.num = num;
data.name = name;
if (sex == 1)
data.sex = "男";
if (sex == 0)
data.sex = "女";
data.student_num = student_num;
data.score = score;
//--------------------------------------------------------
info.SetAttribute("序号", data.num.ToString());
info.SetAttribute("姓名", data.name);
info.SetAttribute("性别", data.sex);
info.SetAttribute("学号", data.student_num.ToString());
info.SetAttribute("分数", data.score.ToString());
root.AppendChild(info);//将子节点按照创建顺序,添加到xml
xml.AppendChild(root);
xml.Save(path);
}
}
#region 删除数据
private void DeleteXml(int num)
{
path = Application.dataPath + "/data.xml";
if (File.Exists(path))
{
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNodeList DataList = xml.SelectSingleNode("Data").ChildNodes;
foreach (XmlElement item in DataList)
{
if (item.GetAttribute("序号") == num.ToString() || item.GetAttribute("学号") == num.ToString())
{
//item.RemoveAttribute("序号");//删除单独数据
item.RemoveAll();//删除整行数据
}
}
xml.Save(path);
}
}
private void DeleteXml(string name)
{
path = Application.dataPath + "/data.xml";
if (File.Exists(path))
{
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNodeList DataList = xml.SelectSingleNode("Data").ChildNodes;
foreach (XmlElement item in DataList)
{
if (item.GetAttribute("姓名") == name || item.GetAttribute("性别") == name)
{
//item.RemoveAttribute("序号");//删除单独数据
item.RemoveAll();//删除整行数据
}
}
xml.Save(path);
}
}
#endregion
/// <summary>
/// 读取数据 获取
/// </summary>
private void LoadXml()
{
path = Application.dataPath + "/data.xml";
if (File.Exists(path))
{
XmlDocument xml = new XmlDocument();
xml.Load(path);//加载xml文件
XmlNodeList nodeList = xml.SelectSingleNode("Data").ChildNodes;
foreach (XmlElement item in nodeList)//遍历所以子节点
{
if (item.Name == "Info")
{
Debug.Log(item.GetAttribute("序号"));
Debug.Log(item.GetAttribute("姓名"));
Debug.Log(item.GetAttribute("性别"));
}
}
}
}
/// <summary>
/// 更新数据 修改
/// </summary>
private void UpdateXML(string name, float score)
{
path = Application.dataPath + "/data.xml";
if (File.Exists(path))
{
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNodeList nodeList = xml.SelectSingleNode("Data").ChildNodes;
foreach (XmlElement xe in nodeList)
{
//拿到节点中属性Name =小王的节点
if (xe.GetAttribute("姓名") == name)
{
//更新节点属性
xe.SetAttribute("分数", score.ToString());
break;
}
}
xml.Save(path);
}
}
}