先总结一波:这次介绍的xml2lua是使用tinyxml的C++开源代码,加上自己定制的内容,再一起封装成exe可执行文件。
通过编写一个bat文件,我们可以实现在实行exe的时候把读取路径、生成路径传进程序。定制部分是核心优化点,下面详细介绍下思路:
首先基础功能是后序遍历读取路径下的所有文件内的xml文件,逐个打开并访问第一个sheet的所有内容,由第二行内容决定使用何种解释器(例如i对应数值解释器,s对应字符串解释器,t对应列表解释器),由第一行决定key名,生成具有key-value的lua文件,并且最后将所有lua文件汇总到main.lua中require,而项目代码只需要require main.lua即可。
额外的,我们不想客户端缓存过多表内容(吃的都是机器的内存),这里就可以在require的时候,根据表第四行的内容决定哪些内容不需要生成到客户端使用的lua文件(例如c就是只有客户端需要,s就是服务器需要,b就是两端都需要),或者哪些不在main.lua中require(在首次使用到表时动态加载)。
进一步的优化,则是把一些非常大的表的key值去掉,只保留value,在脚本内需要使用setmetatable({}, { __index = {}}})来设置配置表的元表,以达到能key-value访问的效果。这一优化能使配置文件的大小和占用的缓存空间减小一半以上。