您的位置:首页 > 新闻动态 > Unity3D

Xml文件操作(创建、读取、写入、修改)

来源: 2022/9/11      点击:

创建Xml文件

创建Xml需要注意层级,一层有一层的添加到xml中:

using System.IO;
using System.Xml;
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    void Start()
    {
        CreateXML();
    }

    //创建XML
    void CreateXML()
    {
        string path = Application.streamingAssetsPath + "/data.xml";
        //创建xml文档
        XmlDocument xml = new XmlDocument();
        //创建根节点
        XmlElement root = xml.CreateElement("Node");

        //创建根节点的子节点
        XmlElement element = xml.CreateElement("Person");
        //设置根节点的子节点的属性
        element.SetAttribute("id", "1");
        //添加两个子节点到根节点的子节点的下面
        XmlElement elementChild1 = xml.CreateElement("Name");
        elementChild1.SetAttribute("name", "");
        elementChild1.InnerText = "王五";
        XmlElement elementChild2 = xml.CreateElement("Age");
        elementChild2.SetAttribute("age", "");
        elementChild2.InnerText = "18";
        //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
        element.AppendChild(elementChild1);
        element.AppendChild(elementChild2);
        //再创建一个根节点的子节点
        XmlElement element2 = xml.CreateElement("Person");
        //设置根节点的子节点的属性 名字一样 属性不一样也可以
        element2.SetAttribute("id", "2");
        //添加两个子节点到根节点的子节点的下面
        XmlElement elementChild3 = xml.CreateElement("Name");
        elementChild3.SetAttribute("name", "");
        elementChild3.InnerText = "李四";
        XmlElement elementChild4 = xml.CreateElement("Age");
        elementChild4.SetAttribute("age", "");
        elementChild4.InnerText = "22";
        element2.AppendChild(elementChild3);
        element2.AppendChild(elementChild4);
        //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
        root.AppendChild(element);
        root.AppendChild(element2);
        xml.AppendChild(root);
        //*后保存文件
        xml.Save(path);
    }
}

读取Xml文件

读取Xml,需要从根节点一层一层往下找,根节点找子节点,子节点找孙节点。


我们就先以查找属性的方式找到我们需要的节点数据:

using System.IO;
using System.Xml;
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    void Start()
    {
        LoadXml();
    }

    //读取XML
    void LoadXml()
    {
        XmlDocument xml = new XmlDocument();
        xml.Load(Application.streamingAssetsPath + "/data.xml");
        XmlNodeList xmlNodeList = xml.SelectSingleNode("Node").ChildNodes;
        //遍历所有子节点
        foreach (XmlElement xl1 in xmlNodeList)
        {
            if (xl1.GetAttribute("id") == "1")
            {
                //继续遍历id为1的节点下的子节点
                foreach (XmlElement xl2 in xl1.ChildNodes)
                {
                    if (xl2.GetAttribute("name") == "")
                    {
                        Debug.Log(xl2.InnerText);
                    }
                    else if (xl2.GetAttribute("age") == "")
                    {
                        Debug.Log(xl2.InnerText);
                    }
                }
            }
        }
    }
}
根据节点的名字进行查找:


using System.IO;
using System.Xml;
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    void Start()
    {
        ReadXml();
    }

    //读取XML
    void ReadXml()
    {
        XmlDocument xml = new XmlDocument();
        xml.Load(Application.streamingAssetsPath + "/data.xml");
        XmlNodeList xmlNodeList = xml.SelectSingleNode("Node").ChildNodes;
        //遍历所有子节点
        foreach (XmlElement xl1 in xmlNodeList)
        {
            if (xl1.Name == "Person" && xl1.GetAttribute("id") == "1")
            {
                //继续遍历名字叫做Person,id为1的节点下的子节点
                foreach (XmlElement xl2 in xl1.ChildNodes)
                {
                    if (xl2.Name == "Name")
                    {
                        Debug.Log(xl2.InnerText);
                    }
                    else if (xl2.Name == "Age")
                    {
                        Debug.Log(xl2.InnerText);
                    }
                }
            }
        }
    }
}
不知道名字属性怎么办


using System.IO;
using System.Xml;
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    void Start()
    {
        ReadXml();
    }

    //读取XML
    void ReadXml()
    {
        XmlDocument xml = new XmlDocument();
        xml.Load(Application.streamingAssetsPath + "/data.xml");
        //获取根节点
        XmlNode rootNode = xml.FirstChild;
        XmlNodeList nodeList = rootNode.ChildNodes;
        //遍历所有子节点
        int Count = nodeList.Count;
        for (int i = 0; i < Count; i++)
        {
            Debug.Log(nodeList.Item(i).InnerText);
        }
    }
}

修改Xml文件

修改Xml文件的数据,就需要根据节点的名字或者节点的属性找到对应的节点修改数据,之后保存文件即可:

using System.IO;
using System.Xml;
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    void Start()
    {
        UpdateXML();
    }

    //修改XML
    void UpdateXML()
    {
        string path = Application.streamingAssetsPath + "/data.xml";
        if (File.Exists(path))
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(path);
            XmlNodeList xmlNodeList = xml.SelectSingleNode("Node").ChildNodes;
            foreach (XmlElement xl1 in xmlNodeList)
            {
                if (xl1.GetAttribute("id") == "1")
                {
                    //把id为1的属性改为5
                    xl1.SetAttribute("id", "5");
                }
                if (xl1.GetAttribute("id") == "2")
                {
                    foreach (XmlElement xl2 in xl1.ChildNodes)
                    {
                        if (xl2.Name == "Name")
                        {
                            //修改其里面的内容
                            xl2.SetAttribute("name", "abc");
                            xl2.InnerText = "赵六";
                        }
                    }
                }
            }
            xml.Save(path);
        }
    }
}

添加数据

using System.IO;
using System.Xml;
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    void Start()
    {
        AddXMLData();
    }

    //添加XML
    void AddXMLData()
    {
        string path = Application.streamingAssetsPath + "/data.xml";
        if (File.Exists(path))
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(path);
            XmlNode root = xml.SelectSingleNode("Node");
            XmlElement element = xml.CreateElement("Person");
            //设置节点的属性
            element.SetAttribute("id", "2");
            XmlElement elementChild1 = xml.CreateElement("Name");
            elementChild1.SetAttribute("name", "ced");
            elementChild1.InnerText = "李四";
            XmlElement elementChild2 = xml.CreateElement("Age");
            elementChild2.SetAttribute("age", "123");
            elementChild2.InnerText = "11";
            //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
            element.AppendChild(elementChild1);
            element.AppendChild(elementChild2);
            root.AppendChild(element);
            xml.AppendChild(root);
            //*后保存文件
            xml.Save(path);
        }
    }
}

添加数据使用AppendChild()函数进行添加。

本文来自网络,版权归原作者所有。