首先转换成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:
--this is luatoxml
local M = {}
local indentation = ""
function M.ToXmlString(value)
value = string.gsub(value, "&", "&"); -- '&' -> "&"
value = string.gsub(value, "<", "<"); -- '<' -> "<"
value = string.gsub(value, ">", ">"); -- '>' -> ">"
value = string.gsub(value, "\"", """); -- '"' -> """
return value;
end
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 .. ">" .. M: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()