这几天刚接到一个任务:要将xml配置文件转成可以直接读写的lua文件,方便在lua程序中直接调用,废话不多说直接上代码
(xmZMlua.lua文件)
saveDirPath = "/xxx/" --- 保存转好的lua文件路劲(其中xxx代表的是路径,下同)
xmlDirPath = "/xxx/" --- 待转的xml文件路径
require "lfs"
function SaveTableContent(file, obj)
local szType = type(obj);
if szType == "number" then
file:write(obj);
elseif szType == "string" then
file:write(string.format("%q", obj));
elseif szType == "table" then
--把table的内容格式化写入文件
-- print(obj.nodeFlag)
if obj.nodeFlag ~= nil then
if obj:numProperties() == 0 and obj:numChildren() == 0 then
SaveTableContent(file, obj:value() or "");
else
file:write("{");
if obj:numProperties() ~= 0 then
-- print(obj)
file:write("[\"$\"]={");
local pTable = {}
local properties = obj:properties()
for i=1, #properties do
local propertie = properties[i]
local propertieName = propertie.name
local propertieValue = propertie.value
-- print("")
file:write("[");
SaveTableContent(file, propertieName);
file:write("]=");
SaveTableContent(file, propertieValue);
if i ~= #properties then file:write(", ") end
end
file:write("}");
if obj:numChildren() ~= 0 then file:write(",") end
end
if obj:numChildren() ~= 0 then
-- print("numChildren:"..tostring(obj:numChildren()))
local allChildrenTable = {}
local children = obj:children()
local nextChildName = ""
local lastChildName = ""
for i=1,obj:numChildren() do
local child = children[i]
nextChildName = child:name()
-- print("lastChildName1-----------:"..lastChildName)
if nextChildName ~= lastChildName then
-- print("lastChildName2-----------:"..lastChildName)
allChildrenTable[nextChildName] = {}
lastChildName = nextChildName
-- print("lastChildName4-----------:"..lastChildName)
end