Unity解析XML文件

因爲有些老項目還是用了XML來存取數據和存放相應的遊戲配置。所以XML的讀取還是需要重溫一下。

XML文件相比於JSON而言,稍微複雜一點。而且現在基本上都傾向於用JSON,更加的輕量級。

Unity內置的API是支持解析XML的。

我們通過下面的一個例子來重溫一下,Unity環境下XML的讀取。

下面這個是我們要讀取的XML的文件,該文件我們放在了UnityAsset目錄下的Resources文件夾中,這樣做是爲了方便後期的讀取。當然了,這個位置可以自定義在Unity目錄下的任何文件夾下,只要我們讀取的到。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
	<system_unlock id="1" group="" type="1" showExt="false" openType="1" />
	<system_unlock id="2" group="" type="1" showExt="false" openType="1" />
</root>

上面這個是一個比較常規的XML例子,是我們遊戲的一個配置表,用XML寫的。

然後我們就寫代碼來讀取這份文件。

首先我們如果想要正常存儲這個XML中的每一條Node的話就需要創建一個類。

public class SystemUnlock
{
    public int m_id;
    public string m_group;
    public int m_type;
    public bool m_showExt;
    public int m_openType;
    public SystemUnlock(string id,string group,string type,string showExt,string openType)
    {
        m_id = int.Parse(id);
        m_group = group;
        m_type = int.Parse(type);
        m_showExt = bool.Parse(showExt);
        m_openType = int.Parse(openType);
    }

    public SystemUnlock()
    {

    }
}

我們對類的定義如上所示,通過一個構造方法,在構造方法裏面轉換類型。要知道XML讀取出來的node全部都是string類型。轉換成相應的類型,需要我們後期自己處理。在這裏我們直接寫到了構造方法中。

public class LoadXML : MonoBehaviour
{
    private List<SystemUnlock> m_systems = new List<SystemUnlock>();
    private void Start()
    {
        LoadFile();
    }

    void LoadFile()
    {
        XmlDocument xmlDoc = new XmlDocument();

        TextAsset xmlfile = Resources.Load<TextAsset>("1");
        if (xmlfile.text != null)
        {
            Debug.Log(xmlfile.text);
            xmlDoc.LoadXml(xmlfile.text);
            XmlNodeList infoNodeList = xmlDoc.SelectSingleNode("root").ChildNodes;
            for (int i = 0; i < infoNodeList.Count; i++)
            {
                SystemUnlock sys = new SystemUnlock(infoNodeList[i].Attributes["id"].Value, infoNodeList[i].Attributes["group"].Value, 
                    infoNodeList[i].Attributes["type"].Value, infoNodeList[i].Attributes["showExt"].Value, infoNodeList[i].Attributes["openType"].Value);
                m_systems.Add(sys);
                Debug.Log(sys.m_id);
            }
        }
    }
}

上面的方法,是一個讀取XML並存儲的一套業務邏輯。

在這個邏輯中,我們通過Resources讀取XML文件,這裏我們的XML文件命名爲1.txt,在Resources裏面讀取是不需要加後綴的。所以這裏讀取成立。

讀取完畢以後直接通過訪問他們的子節點,將所有的變量讀取出來並存儲到我們臨時創建的集合中。

到此,XML解析結束。

稍後我會將原工程上傳到Git上。這樣大家可以直接閱讀源碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章