Ir para conteúdo

Lua Xml Parser


Nostradamus

Posts Recomendados

De princípio esse XML Parser fora criado para a BlackOnix para ler certos atribuitos. Mas, como o revdbsys está chegando, achamos que não iríamos precisar mais.

 

Créditos: Nostradamus & Jovial

 

function fileToString(dir)
local line
local string = ''
for (line in io.lines(dir)) do
	string = string..line..'\n'
end
return string
end

function ParseArgs(s)
local arg = {}
string.gsub(s, "(%w+)=([\"'])(.-)%2", function (w, _, a) arg[w] = a	end)
return arg
end

function XMLReader(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, "<(%/?)(%w+)(.-)(%/?)>", j)
	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  
		table.insert(top, {label=label, xarg=ParseArgs(xarg), empty=1})
	elseif (c == "") then   
		top = {label=label, xarg=ParseArgs(xarg)}
		table.insert(stack, top)   
	else  
		local toclose = table.remove(stack)  
		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.n], text)
end
if (#stack > 1) then
	error("unclosed "..stack[stack.n].label)
end
return stack[1]
end

 

Detalhes: o código foi desenvolvido obedecendo a documentação de estruturação padrão da BlackOnix desenvolvido por Nostradamus.

 

E sim, fora baseado num exemplo do LUA-Users, eu mesmo me encarreguei de atualizar no WIKI de lá, mais tarde irei atualizar novamente, devido ao fato de esse script aqui postado, ter a função fileToString.

Editado por Nostradamus
Link para o comentário
Compartilhar em outros sites

Hiho!

 

nostradamus,

sem querer ser chato, nem acusando, nem nada disso, mas esse script foi feito por voces do zero mesmo?

acabei de entrar em um site aqui, e tinha esse code, identico, só mudava nos parenteses. Até mesmo o nome das strings tavam iguais. pode ser que voce postou lá, nao sei. link de prova:

aguardando resposta!

 

--edited

 

under,

se forem baseados um no outro, entao okay

mas mesmo assim deveria ter add (no minimo) os creditos do site

é estranho um ser praticamente igual ao outro ;o

 

--edited

 

nostradamus,

agora sim *-*

cya ^^

Editado por soulblaster
Link para o comentário
Compartilhar em outros sites

Mas mesmo assim.. ripping não é uma coisa legal. Até mesmo para um cara de 22 anos como o nostradamus, um usuario experiente do forum, que sabe "muita coisa" de programação. Posso estar errado, não entendo muito dessas coisas, mas eu sei ler, e os codigos estão parecidos pra caramba.. Se o Nostradamus usou o codigo citado pelo soublaster, ele deveria ao menos dar os creditos.

 

Abraços.

Pain

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...