local xml = {_version = "0.1.1"} -- 定义一个空表,用于存储模块的函数和变量' -- 数据清洗函数(处理命名空间和空值)把 改成 local function clean_data(data) local function process(tbl) local result = {} for k, v in pairs(tbl) do -- 去除命名空间前缀[6,9](@ref) local new_key = k:gsub("v1:", ""):gsub("soap:", ""):gsub("soapenv:", "") if type(v) == "table" then -- 处理数组结构[4](@ref) if #v > 0 then local arr = {} for i, item in ipairs(v) do arr[i] = process(item) end result[new_key] = arr else result[new_key] = process(v) end else result[new_key] = v ~= "" and v or nil end end if next(result) == nil then result = "" end return result end return process(data) end function xml.parse(xml_str) local handler = require("xmlhandler.tree") local xml2lua = require("xml2lua") local h = handler:new() -- 使用 pcall 捕获异常 local ok, err = pcall( function() xml2lua.parser(h):parse(xml_str) end ) if not ok then return 1, "XML解析失败:"..err end return 0, clean_data( h.root ) end function xml.json_to_xml(data, root_tag) local xml = {} local function build_xml(node, tag) if type(node) == "table" then xml[#xml + 1] = "<" .. tag .. ">" for k, v in pairs(node) do build_xml(v, k) -- 递归处理子节点 end xml[#xml + 1] = "" else xml[#xml + 1] = "<" .. tag .. ">" .. tostring(node) .. "" end end build_xml(data, root_tag or "root") return table.concat(xml) end return xml