NO

Lua Xml Parser

Por Nostradamus, 30 de set. de 2007 em Tutoriais de Scripting

script
6
2.1k
NostradamusN
30 de setembro de 2007 às 01:54

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 Outubro 5 por Nostradamus

upkingU
30 de setembro de 2007 às 03:00

nostra sera q da pra da uma explicasão e um exemplo de pra q isso serve?

 

nao entendi bulufas

soulblasterS
04 de outubro de 2007 às 19:53

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 Outubro 6 por soulblaster

u n d e rU
05 de outubro de 2007 às 13:11

Soul,

Eu verifiquei e os códigos não são iguais.

Possivelmente, um e outro são baseados, porém é da autoria de Nostradamus. (este tópico)

06 de outubro de 2007 às 16:22

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

NostradamusN
06 de outubro de 2007 às 19:19

@FrozenMapper

 

Leia o post até o final e verás...