將lua資料表格 轉換成json格式,xml格式
阿新 • • 發佈:2021-01-24
首先轉換成json,不廢話直接程式碼:
local temp = require(tableName) local function table2json(t) --將表格轉換為json local function serialize(tbl) local tmp = {} for k, v in pairs(tbl) do local k_type = type(k) local v_type = type(v) local key = (k_type == "string" and "\"" .. k .. "\":") or (k_type == "number" and "") local value = (v_type == "table" and serialize(v)) or (v_type == "boolean" and tostring(v)) or (v_type == "string" and "\"" .. v .. "\"") or (v_type == "number" and v) tmp[#tmp + 1] = key and value and tostring(key) .. tostring(value) or nil end if table.maxn(tbl) == 0 then return "{" .. table.concat(tmp, ",") .. "}" else return "[" .. table.concat(tmp, ",") .. "]" end end assert(type(t) == "table") return serialize(t) end local function appendFile(fileName, content) local f = assert(io.open(fileName, 'w')) f:write(content) f:close() end appendFile('itemtable.json', table2json(temp))--temp就是要轉換的資料
接下來是轉換成xml:
XmlParser = {}; function XmlParser:ToXmlString(value) value = string.gsub(value, "&", "&"); -- '&' -> "&" value = string.gsub(value, "<", "<"); -- '<' -> "<" value = string.gsub(value, ">", ">"); -- '>' -> ">" value = string.gsub(value, "\"", """); -- '"' -> """ --value = string.gsub(value, "([^%w%&%;%p%\t% ])", -- function(c) -- return string.format("&#x%X;", string.byte(c)) -- end); return value; end
--this is luatoxml local M = {} local indentation = "" local xxxx = newParser() function M.toxml(value) local xml = "" local t = type(value) if t == "string" then xml = xml .. indentation .. "<" .. value .. "/>\n" elseif t == "table" then for name, data in pairs(value) do if type(name) == "number" and type(data) == "table" then xml = xml .. "<entry>" xml = xml .. M.toxml(data) xml = xml .. "</entry>" elseif type(data) == "table" then local arr = true for kk, vv in pairs(data) do if type(kk) ~= "number" then arr = false break end end local sssss = "" if arr then for g = 1, #data do if type(data[g]) == "table" then for gg = 1, #data[g] do sssss = sssss .. data[g][gg] .. "," end else sssss = sssss .. data[g] .. "," end end else for kk, vv in pairs(data) do sssss = sssss .. vv .. "," end end xml = xml .. indentation .. "<" .. name .. ">" xml = xml .. sssss xml = xml .. indentation .. "</" .. name .. ">\n" else xml = xml .. indentation .. "<" .. name if type(data) == "table" then local children = {} local number_strings = {} for k, v in pairs(data) do local vtype = type(v) local ktype = type(k) if vtype == "table" then children[k] = v elseif ktype == "string" then xml = xml .. " " .. k .. '="' .. tostring(v) .. '"' elseif ktype == "number" and vtype == "string" then table.insert(number_strings, v) end end if next(children) ~= nil or #number_strings > 1 then xml = xml .. ">\n" indentation = indentation .. "\t" xml = xml .. M.toxml(children) xml = xml .. M.toxml(number_strings) indentation = indentation:sub(1, #indentation - 1) xml = xml .. indentation .. "</" .. name .. ">\n" else if #number_strings == 1 then xml = xml .. ">" .. number_strings[1] .. "</" .. name .. ">\n" else xml = xml .. "/>\n" end end elseif string.find(tostring(data), "<") ~= nil then xml = xml .. ">" .. xxxx:ToXmlString(data) .. "</" .. name .. ">\n" else xml = xml .. ">" .. tostring(data) .. "</" .. name .. ">\n" end end end end return xml end return M
local luatoxml = require "luatoxml"
local tableName = "表名"
local temp = require(tableName)
f = assert(io.open("luaToxml/" .. tableName .. '.xml', 'w'))--轉換後的xml名字,存放路徑
f:write('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>')
f:write('<LocalDatas xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">')
f:write(luatoxml.toxml(temp))
f:write("</LocalDatas>")
f:close()