Thank you smartmike
but I think that should be something wrong…
this is the carlos funtion to parse the XML where I add the xml formatted as above
local http = require(“socket.http”)
local io = require(“io”);
local ltn12 = require(“ltn12”)
function parseargs(s)
local arg = {}
string.gsub(s, “(%w+)=([”’])(.-)%2", function (w, _, a)
arg[w] = a
end)
return arg
end
function collect(s)
local stack = {}
local top = {}
table.insert(stack, top)
local ni,c,label,xarg, empty
local i, j = 1, 1
while true do
ni,j,c,label,xarg, empty = string.find(s, “”, i)
if not ni then break end
local text = string.sub(s, i, ni-1)
if not string.find(text, “^%s*$”) then
table.insert(top, text)
end
if empty == “/” then – empty element tag
table.insert(top, {label=label, xarg=parseargs(xarg), empty=1})
elseif c == “” then – start tag
top = {label=label, xarg=parseargs(xarg)}
table.insert(stack, top) – new level
else – end tag
local toclose = table.remove(stack) – remove top
top = stack[#stack]
if #stack < 1 then
error("nothing to close with "…label)
end
if toclose.label ~= label then
error("trying to close “…toclose.label…” with "…label)
end
table.insert(top, toclose)
end
i = j+1
end
local text = string.sub(s, i)
if not string.find(text, “^%s*$”) then
table.insert(stack[#stack], text)
end
if #stack > 1 then
error("unclosed "…stack[stack.n].label)
end
return stack[1]
end
b = http.request( “http://www.digitalpromo.it/webradio/listaBrani.xml”) – blah blah use your own url
x = collect(b); – parse xml
print (x);
– then the function to print the length value
local function printXML(xml)
if xml then
print(xml[1].length)
end
end
printXML(x);
if you try to execute you’ll retreive a nil value
ast
[import]uid: 5762 topic_id: 472 reply_id: 1574[/import]