• 您的位置:首頁 > 新聞動態(tài) > Unity3D

    Xml文件操作(創(chuàng)建、讀取、寫入、修改)

    2022/9/11??????點擊:

    創(chuàng)建Xml文件

    創(chuàng)建Xml需要注意層級,一層有一層的添加到xml中:

    using System.IO;
    using System.Xml;
    using UnityEngine;
    
    public class Demo5 : MonoBehaviour
    {
        void Start()
        {
            CreateXML();
        }
    
        //創(chuàng)建XML
        void CreateXML()
        {
            string path = Application.streamingAssetsPath + "/data.xml";
            //創(chuàng)建xml文檔
            XmlDocument xml = new XmlDocument();
            //創(chuàng)建根節(jié)點
            XmlElement root = xml.CreateElement("Node");
    
            //創(chuàng)建根節(jié)點的子節(jié)點
            XmlElement element = xml.CreateElement("Person");
            //設(shè)置根節(jié)點的子節(jié)點的屬性
            element.SetAttribute("id", "1");
            //添加兩個子節(jié)點到根節(jié)點的子節(jié)點的下面
            XmlElement elementChild1 = xml.CreateElement("Name");
            elementChild1.SetAttribute("name", "");
            elementChild1.InnerText = "王五";
            XmlElement elementChild2 = xml.CreateElement("Age");
            elementChild2.SetAttribute("age", "");
            elementChild2.InnerText = "18";
            //把節(jié)點一層一層的添加至xml中,注意他們之間的先后順序,這是生成XML文件的順序
            element.AppendChild(elementChild1);
            element.AppendChild(elementChild2);
            //再創(chuàng)建一個根節(jié)點的子節(jié)點
            XmlElement element2 = xml.CreateElement("Person");
            //設(shè)置根節(jié)點的子節(jié)點的屬性 名字一樣 屬性不一樣也可以
            element2.SetAttribute("id", "2");
            //添加兩個子節(jié)點到根節(jié)點的子節(jié)點的下面
            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);
            //把節(jié)點一層一層的添加至xml中,注意他們之間的先后順序,這是生成XML文件的順序
            root.AppendChild(element);
            root.AppendChild(element2);
            xml.AppendChild(root);
            //*后保存文件
            xml.Save(path);
        }
    }
    

    讀取Xml文件

    讀取Xml,需要從根節(jié)點一層一層往下找,根節(jié)點找子節(jié)點,子節(jié)點找孫節(jié)點。


    我們就先以查找屬性的方式找到我們需要的節(jié)點數(shù)據(jù):

    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;
            //遍歷所有子節(jié)點
            foreach (XmlElement xl1 in xmlNodeList)
            {
                if (xl1.GetAttribute("id") == "1")
                {
                    //繼續(xù)遍歷id為1的節(jié)點下的子節(jié)點
                    foreach (XmlElement xl2 in xl1.ChildNodes)
                    {
                        if (xl2.GetAttribute("name") == "")
                        {
                            Debug.Log(xl2.InnerText);
                        }
                        else if (xl2.GetAttribute("age") == "")
                        {
                            Debug.Log(xl2.InnerText);
                        }
                    }
                }
            }
        }
    }
    根據(jù)節(jié)點的名字進行查找:


    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;
            //遍歷所有子節(jié)點
            foreach (XmlElement xl1 in xmlNodeList)
            {
                if (xl1.Name == "Person" && xl1.GetAttribute("id") == "1")
                {
                    //繼續(xù)遍歷名字叫做Person,id為1的節(jié)點下的子節(jié)點
                    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");
            //獲取根節(jié)點
            XmlNode rootNode = xml.FirstChild;
            XmlNodeList nodeList = rootNode.ChildNodes;
            //遍歷所有子節(jié)點
            int Count = nodeList.Count;
            for (int i = 0; i < Count; i++)
            {
                Debug.Log(nodeList.Item(i).InnerText);
            }
        }
    }

    修改Xml文件

    修改Xml文件的數(shù)據(jù),就需要根據(jù)節(jié)點的名字或者節(jié)點的屬性找到對應的節(jié)點修改數(shù)據(jù),之后保存文件即可:

    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")
                            {
                                //修改其里面的內(nèi)容
                                xl2.SetAttribute("name", "abc");
                                xl2.InnerText = "趙六";
                            }
                        }
                    }
                }
                xml.Save(path);
            }
        }
    }

    添加數(shù)據(jù)

    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");
                //設(shè)置節(jié)點的屬性
                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";
                //把節(jié)點一層一層的添加至xml中,注意他們之間的先后順序,這是生成XML文件的順序
                element.AppendChild(elementChild1);
                element.AppendChild(elementChild2);
                root.AppendChild(element);
                xml.AppendChild(root);
                //*后保存文件
                xml.Save(path);
            }
        }
    }

    添加數(shù)據(jù)使用AppendChild()函數(shù)進行添加。

    本文來自網(wǎng)絡(luò),版權(quán)歸原作者所有。