因爲有些老項目還是用了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上。這樣大家可以直接閱讀源碼。