Unity学习心得之xml存储读取

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);

        }
    }

猜你喜欢

转载自blog.csdn.net/asdfghj253/article/details/84450845
今日推荐