关于XML转Lua表,我的想法是,首先摸清XML需要用到的数据的相关格式规律,然后用lua解析出来,保存为Lua表,再把表专为lua文件。
了解XML
首先是我理解的XML格式
<?xml version="1.0"?> <!-- 表头 -->
<Workbook <!-- 表信息 -->
<!-- 省略一些细节 -->
...
<Worksheet ss:Name="工作表1"> <!-- 这是我们要关注的每个小表标志 如果有多个小表就有多个这样的标志,以小表为单位 -->
<Table ss:ExpandedColumnCount="6" ss:ExpandedRowCount="20" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="65" ss:DefaultRowHeight="15"><!-- 不关注 -->
<Row><!-- 每行信息列出来 -->
<Cell ss:StyleID="s17"><Data ss:Type="String">字段英文名</Data></Cell><!-- 每列信息列出来 -->
<Cell ss:StyleID="s17"><Data ss:Type="String">level</Data></Cell>
<Cell ss:StyleID="s17"><Data ss:Type="String">costXP</Data></Cell>
<Cell ss:StyleID="s17"><Data ss:Type="String">waterMAX</Data></Cell>
<Cell ss:StyleID="s17"><Data ss:Type="String">waterrestorespeed</Data></Cell>
<Cell ss:StyleID="s17"><Data ss:Type="String">levelname</Data></Cell>
</Row>
</Worksheet>
</Workbook>
解析
基本上就是按上面找到规则,用正则匹配与修改。
出现过一些小问题
1. 要跟策划先统一好规则,因为我想工具化,不想每次都手动改表。我订的规则是前五行策划需要的话放说明,不需要的话也统一空出来,万一以后突然策划想补充些什么呢?增加一行default数值配置。然后还是正式数据。
2. cell的写法有两种
<Cell ss:StyleID="s16"/>
<Cell ss:StyleID="s17"><Data ss:Type="Number">2</Data></Cell>
所以不能简单用”< Cell.-< /Cell>”来匹配
类似的变成搜索”< Cell”来确定范围
lua表转lua文件
基本也不难,之前做过,所以直接拿来用。
遇到问题:
想统一用py来调,所以又加了一个py来统一入口,py掉lua用的是lupa,安装方法
sudo pip install lupa
最后,把完整的代码贴一下
local print = print
local table = table
local string = string
local type = type
local pairs = pairs
local printAll = function(target, params)
local targetType = type(target)
if targetType == "table" then
local tip = params and params.tip or "This is a Table!^_<......................................"
local cache = {[target] = "."}
local isHead = false
local function dump(t, space, level)
local temp = {}
if not isHead then
temp = {tip}
isHead = true
end
for k, v in pairs(t) do
local key = tostring(k)