XML文件存储

存储位置分析

  1. 存储xml文件 在Unity中一定是使用各平台都可读可写可找到的路径
  2. Resources 可读 不可写 打包后找不到 (×)
  3. Application.streamingAssetsPath 可读 PC端可写 iosmac不可写 找得到 (×)
  4. Application.dataPath 打包后找不到(×)
  5. Application.persistentDataPath 可读可写找得到 (√)

存储xml文件

XmlDocument 需要引入头文件using System.Xml;

代码

//关键类 XmlDocument 用于创建节点 存储文件
//关键类 XmlDeclaration 用于添加版本信息
//关键类 XmlElement 节点类

        //存储有5步
        //1.创建文本对象
        XmlDocument xml = new XmlDocument();

        //2.添加固定版本信息
        //这一句代码 相当于就是创建<?xml version="1.0" encoding="UTF-8"?>这句内容
        XmlDeclaration xmlDec = xml.CreateXmlDeclaration("1.0", "UTF-8", "");
        //创建完成过后 要添加进入 文本对象中
        xml.AppendChild(xmlDec);

        //3.添加根节点
        XmlElement root = xml.CreateElement("Root");
        xml.AppendChild(root);

        //4.为根节点添加子节点
        //加了一个 name子节点
        XmlElement name = xml.CreateElement("name");
        name.InnerText = "唐老狮";
        root.AppendChild(name);

        XmlElement atk = xml.CreateElement("atk");
        atk.InnerText = "10";
        root.AppendChild(atk);

        XmlElement listInt = xml.CreateElement("listInt");
        for (int i = 1; i <= 3; i++)
        {
            XmlElement childNode = xml.CreateElement("int");
            childNode.InnerText = i.ToString();
            listInt.AppendChild(childNode);
        }
        root.AppendChild(listInt);

        XmlElement itemList = xml.CreateElement("itemList");
        for (int i = 1; i <= 3; i++)
        {
            XmlElement childNode = xml.CreateElement("Item");
            //添加属性
            childNode.SetAttribute("id", i.ToString());
            childNode.SetAttribute("num", (i * 10).ToString());
            itemList.AppendChild(childNode);
        }
        root.AppendChild(itemList);

        //5.保存
        xml.Save(path);

上述代码得到的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Root>
  <name>ADd7</name>
  <atk>10</atk>>
  <listInt>
    <int>1</int>
    <int>2</int>
    <int>3</int>
  </listInt>
  <itemList>
    <Item id="1" num="10" />
    <Item id="2" num="20" />
    <Item id="3" num="30" />
  </itemList>
</Root>

文件的修改(添加/移除)

判断文件是否存在 这个功能是在using System.IO中的

代码

        //1.先判断是否存在文件
        if (File.Exists(path))
        {
            //2.加载后 直接添加节点 移除节点即可
            XmlDocument newXml = new XmlDocument();
            newXml.Load(path);

            //修改就是在原有文件基础上 去移除 或者添加
            //移除
            //XmlNode node = newXml.SelectSingleNode("Root").SelectSingleNode("atk");
            //这种是一种简便写法 通过/来区分父子关系
            node = newXml.SelectSingleNode("Root/atk");
            //得到自己的父节点
            XmlNode root2 = newXml.SelectSingleNode("Root");
            //移除子节点方法
            root2.RemoveChild(node);

            //添加节点
            XmlElement speed = newXml.CreateElement("moveSpeed");
            speed.InnerText = "20";
            root2.AppendChild(speed);

            //改了记得存
            newXml.Save(path);
        }

上述代码得到的修改后xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Root>
  <name>ADd7</name>
  <listInt>
    <int>1</int>
    <int>2</int>
    <int>3</int>
  </listInt>
  <itemList>
    <Item id="1" num="10" />
    <Item id="2" num="20" />
    <Item id="3" num="30" />
  </itemList>
  <speed>2</speed>
</Root>