diff --git a/share/lua/intf/modules/common.lua b/share/lua/intf/modules/common.lua index c02d4e7e73..1215ab85b6 100644 --- a/share/lua/intf/modules/common.lua +++ b/share/lua/intf/modules/common.lua @@ -54,6 +54,10 @@ end -- print a table (recursively) function table_print(t,prefix) local prefix = prefix or "" + if not t then + print(prefix.."/!\\ nil") + return + end for a,b in pairs_sorted(t) do print(prefix..tostring(a),b) if type(b)==type({}) then diff --git a/share/lua/modules/simplexml.lua b/share/lua/modules/simplexml.lua index 13d9a0bc83..e2f6b1f07a 100644 --- a/share/lua/modules/simplexml.lua +++ b/share/lua/modules/simplexml.lua @@ -37,25 +37,32 @@ local function parsexml(stream) local parents = {} while reader:read() > 0 do local nodetype = reader:node_type() + --print(nodetype, reader:name()) if nodetype == 'startelem' then local name = reader:name() - local node = { name: '', attributes: {}, children: {} } + local node = { name= '', attributes= {}, children= {} } node.name = name - while reader:NextAttr() == 0 do - node.attributes[reader:Name()] = reader:Value() + while reader:next_attr() == 0 do + node.attributes[reader:name()] = reader:value() end if tree then - tree.children[#tree.children] = node - parents[#parents] = tree - tree = node + table.insert(tree.children, node) + table.insert(parents, tree) end + tree = node elseif nodetype == 'endelem' then - tree = parents[#parents-1] + if #parents > 0 then + tree = parents[#parents] + table.remove(parents) + end elseif nodetype == 'text' then - node.children[#node.children] = reader:Value() + table.insert(tree.children, reader:value()) end end + if #parents > 0 then + error("XML parser error/Missing closing tags") + end return tree end