unity 对XML文件的创建、写入、读取、更新等的操作

本案例使用unity版本:unity5.6.1f1
编程工具:VS2015

项目开发中,会使用xml作为软件的配置文件,在这里记录一下关于XML的基本操作。

本案例将XML文件创建在StreamingAssets文件夹中,若工程中不存在该文件夹请自己创建。
(保存到该文件夹,便于在项目发布时,能够将配置文件一并打包到程序中,并且不被压缩便于日后修改)
引用命名空间:
using System.IO;
using System.Xml;

XML的创建

void CreateXML() {
        localPath = UnityEngine.Application.streamingAssetsPath + "/"+"MyXML.xml";
        if (!File.Exists(localPath) ) {
            XmlDocument xml = new XmlDocument();
            XmlDeclaration xmldecl = xml.CreateXmlDeclaration("1.0", "UTF-8", "");//设置xml文件编码格式为UTF-8
            XmlElement root = xml.CreateElement("Data");//创建根节点
            XmlElement info = xml.CreateElement("Info");//创建子节点
            info.SetAttribute("Name","小王");//创建子节点属性名和属性值
            info.SetAttribute("Age","28");
            info.SetAttribute("Phone","12345678");
            root.AppendChild(info);//将子节点按照创建顺序,添加到xml
            xml.AppendChild(root);
            xml.Save(localPath);//保存xml到路径位置
            Debug.Log("创建XML成功!");
        }
    }

调用该方法,运行结果如下图:
unity 对XML文件的创建、写入、读取、更新等的操作_第1张图片
创建的XML文件


  

XML的写入

void AddXML() {
        localPath = UnityEngine.Application.streamingAssetsPath + "/" + "MyXML.xml";
        if ( File.Exists(localPath) )
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(localPath);//加载xml文件
            XmlNode root = xml.SelectSingleNode("Data");//获取根节点
            XmlElement info = xml.CreateElement("Info_2");//创建新的子节点
            info.SetAttribute("Name", "小李");//创建新子节点属性名和属性值
            info.SetAttribute("Age", "25");
            info.SetAttribute("Phone", "87654321");
            root.AppendChild(info);//将子节点按照创建顺序,添加到xml
            xml.AppendChild(root);
            Debug.Log("添加XML成功!");
        }
    }

在创建MyXML文件后,调用 AddXML() 方法。运行结果如图下图:
unity 对XML文件的创建、写入、读取、更新等的操作_第2张图片
写入后的XML文件


  
  

XML的读取

 void ReadXML() {
        localPath = UnityEngine.Application.streamingAssetsPath + "/" + "MyXML.xml";
        if ( File.Exists(localPath) )
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(localPath);//加载xml文件
            XmlNodeList nodeList = xml.SelectSingleNode("Data").ChildNodes;
            foreach (XmlElement xe in nodeList) {//遍历所以子节点
                if (xe.Name== "Info_2" ) {
                    Debug.Log(xe.GetAttribute("Name"));//获取Name属性值
                    Debug.Log(xe.GetAttribute("Age"));
                    Debug.Log(xe.GetAttribute("Phone"));
                }
            }                     
            Debug.Log("读取XML成功!"+xml.OuterXml);
        }
    }

在写入XML信息后,在Start()中调用ReadXML()方法。运行结果下图:
unity 对XML文件的创建、写入、读取、更新等的操作_第3张图片

XML的更新

public void UpdateXml()
    {
        localPath = UnityEngine.Application.streamingAssetsPath + "/" + "MyXML.xml";
        if ( File.Exists(localPath) )
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(localPath);
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("Data").ChildNodes;
            foreach ( XmlElement xe in nodeList )
            {
                //拿到节点中属性Name =小王的节点
                if ( xe.GetAttribute("Name") == "小王" )
                {
                    //更新节点属性
                    xe.SetAttribute("Age", "21");        
                    break;
                }
            }
            xmlDoc.Save(localPath);
            Debug.Log("更新XML成功!");
        }
    }

在Start()中调用UpdateXml()方法。运行结果下图:
unity 对XML文件的创建、写入、读取、更新等的操作_第4张图片
更新后的XML信息


  
  

XML的删除

 public void DeleteXml()
    {
        localPath = UnityEngine.Application.streamingAssetsPath + "/" + "MyXML.xml";
        if ( File.Exists(localPath) )
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(localPath);
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("Data").ChildNodes;
            foreach ( XmlElement xe in nodeList )
            {
                if ( xe.GetAttribute("Name") == "小李" )
                {
                    xe.RemoveAttribute("Phone");
                }
                if ( xe.GetAttribute("Name") == "小王" )
                {
                    xe.RemoveAll();
                }
            }
            xmlDoc.Save(localPath);
            Debug.Log("删除XML成功!");
        }
    }

在Start()中调用DeleteXml()方法。运行结果下图:
unity 对XML文件的创建、写入、读取、更新等的操作_第5张图片
删除后XML信息


  
  

以上对XML的操作基本满足项目开发的需求,本案例记录XML的基本用法和简单实例,可以根据项目需求进行灵活运用。

参考学习: 雨松MOMO 雨松MOMO程序研究院

你可能感兴趣的:(Unity开发)