版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asdfghj253/article/details/84450845
XML
流程:
存:得到对象->创路径->创xml文档->设节点(设父子关系,注意根节点设置)->保存xml
取:创字符串路径->加载xml->获取节点,innertext来转换->更新数据
存储
1.创建对象
TheSave save = CreateSaveObject();
2.创建存储XML文件路径
//创建存储XML文件路径
string filePath = Application.dataPath + "/StreamingFile" + "/byXML.xml";
3.创建一个xml文档
//创建一个xml文档
XmlDocument xmlDoc = new XmlDocument();
4.设置节点
//创建根节点-最上层节点
XmlElement root = xmlDoc.CreateElement("Save");
//设置根节点的值
root.SetAttribute("name", "saveFile1");//参数("类名","值")
xmlDoc.AppendChild(root);//保存根节点
XmlElement target;
target = xmlDoc.CreateElement("target");
targetPosition = xmlDoc.CreateElement("targetPosition");
targetPosition.InnerText = save.livingTargetPosition[i].ToString();//转换为xml格式
//设置节点层级关系 root-target-(targetPosition,monsterType)
//设置target的子节点是targetPosition,monsterType
target.AppendChild(targetPosition);
//设置root的子节点是target
root.AppendChild(target);
5.保存xml
xmlDoc.Save(filePath);//保存xml
读取
1.创字符串路径
string filePath = Application.dataPath + "/StreamingFile" + "/byXML.xml";
2.加载XML文档
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filePath);
3.获取节点
///获取节点
///通过节点名称获取元素,结果是XmlNodeList类型(注意是list类型),获取taget方面的所有节点
XmlNodeList targets = xmlDoc.GetElementsByTagName("target");
if (targets.Count != 0)
{
foreach (XmlNode target in targets)
{
XmlNode targetPosition = target.ChildNodes[0];
int targetPositionIndex = int.Parse(targetPosition.InnerText);//转换string为int
save.livingTargetPosition.Add(targetPositionIndex);//把得到的值存到save中
}
}
//获取节点
XmlNodeList shootNum = xmlDoc.GetElementsByTagName("shootNum");
int shootNumCount = int.Parse(shootNum[0].InnerText);
save.shootNum=shootNumCount;
5.更新数据
SetGame(save);
总体
//Xml方法
private void SaveByXml()
{
TheSave save = CreateSaveObject();
//创建存储XML文件路径
string filePath = Application.dataPath + "/StreamingFile" + "/byXML.xml";
//创建一个xml文档
XmlDocument xmlDoc = new XmlDocument();
///节点设置
//创建根节点-最上层节点
XmlElement root = xmlDoc.CreateElement("Save");
//设置根节点的值
root.SetAttribute("name", "saveFile1");//参数("类名","值")
XmlElement target;
XmlElement targetPosition;
XmlElement monsterType;
for (int i = 0; i < save.livingTargetPosition.Count; i++)
{
target = xmlDoc.CreateElement("target");
targetPosition = xmlDoc.CreateElement("targetPosition");
targetPosition.InnerText = save.livingTargetPosition[i].ToString();//转换为xml格式
monsterType = xmlDoc.CreateElement("monsterType");
monsterType.InnerText = save.livingMonsterType[i].ToString();//转换为xml格式
//设置节点层级关系 root-target-(targetPosition,monsterType)
//设置target的子节点是targetPosition,monsterType
target.AppendChild(targetPosition);
target.AppendChild(monsterType);
//设置root的子节点是target
root.AppendChild(target);
}
///设置节点层级关系 root-(shootNum,score)
XmlElement shootNum = xmlDoc.CreateElement("shootNum");
shootNum.InnerText = save.shootNum.ToString();
root.AppendChild(shootNum);
XmlElement score = xmlDoc.CreateElement("score");
score.InnerText = save.score.ToString();
root.AppendChild(score);
xmlDoc.AppendChild(root);//保存根节点
///节点设置完成
xmlDoc.Save(filePath);//保存xml
}
private void LoadByXml()
{
string filePath = Application.dataPath + "/StreamingFile" + "/byXML.xml";
if (File.Exists(filePath))//如果文件存在
{
TheSave save = new TheSave();
//加载XML文档
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filePath);
///获取节点
///通过节点名称获取元素,结果是XmlNodeList类型(注意是list类型),获取taget方面的所有节点
XmlNodeList targets = xmlDoc.GetElementsByTagName("target");
//遍历所有的target节点,并获取了节点和子节点的innerText
if (targets.Count != 0) {
foreach (XmlNode target in targets)
{
XmlNode targetPosition = target.ChildNodes[0];
int targetPositionIndex = int.Parse(targetPosition.InnerText);//转换string为int
save.livingTargetPosition.Add(targetPositionIndex);//把得到的值存到save中
XmlNode monsterType = target.ChildNodes[1];
int monsterTypeIndex = int.Parse(monsterType.InnerText);//转换string为int
save.livingMonsterType.Add(monsterTypeIndex);//把得到的值存到save中
}
}
XmlNodeList shootNum = xmlDoc.GetElementsByTagName("shootNum");
int shootNumCount = int.Parse(shootNum[0].InnerText);
save.shootNum=shootNumCount;
XmlNodeList score = xmlDoc.GetElementsByTagName("score");
int scoreCount = int.Parse(score[0].InnerText);
save.score = scoreCount;
///获取节点结束
SetGame(save);
}
}