因为有些老项目还是用了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上。这样大家可以直接阅读源码。