Mock 22 Postado Agosto 4, 2009 Share Postado Agosto 4, 2009 (editado) Olá, estou aqui postando 5 funções para mexer com XML (pegar dados apenas) vi que algumas pessoas tem dificuldade para pegar dados de um XML entao decidi fazer essa lib, apesar de ser bem inutil para pessoas experientes ela serve para iniciantes, ficou bem simples, defidi mesmo fazela para ter mais um motivo para usar POO em uma lib Essa lib roda em qualquer otserver pois rodou no debugger do SCITE e do otscript live se nao rodar no seu server e por causa da função string.explode. Em fim sim eu sou mock daquele forum concorrente ._. decidi postar essa lib aqui tambem pois aqui tem muitos usuarios que ela poderia ser util. Vamos adciona-la logo, vá até funcions.lua e adcione essa linha: dofile('Easy-xml-lib.lua') Depois fassa o download da lib aqui: http://lua.pastey.net/119938 ou se preferir crie o arquivo easy-xml-lib.lua e ponha o seguinte conteudo: --[[ * Author: Mock * Version: 1.00.0 * How to use: > local kind = 2 -- you can change to see another mode > local XML = [==[ <?xml version="1.0" encoding="UTF-8"?> <flags> <flag summonable="0"/> <flag attackable="0"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="1"/> <flag canpushitems="1"/> <flag canpushcreatures="0"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> ]==] > local read = xml:open(XML) -- or xml:open('<xml string="..../>') > read:setSess('flags','flag','mysession') -- <flags>, <flag summonable="0"/>, name of this session? > print(type(read:getSess('mysession'))) --- Will print on console an swtring with XML code fo session flag: <flags><flag summonab... > if kind == 1 then >> table_ = read:readSess('mysession') > else >> table_ = read:readFree('flag') > end > print('-----') > for k,v in pairs(table_) do >> for m,n in pairs(v) do >>> print(m,n) >> end > end >>> print: table ----- summonable, 0 attackable, 0 hostile, 1 illusionable, 0 convinceable, 0 pushable, 1 canpushitems, 1 canpushcreatures, 0 targetdistance, 1 staticattack, 90 runonhealth, 0 * Special thanks for: ** Skyen hasus ** Magus ]]-- xml = {} -- classe function xml:open(file,kind) if kind ~= nil then local file2 = assert(io.open(file,'r')) file = file2:read(-1) file2:close() end if file == nil then return error('File is empyt') end alt = string.explode(file,'\n',2) if alt[1] == nil or string.find(alt[1],"<?xml") == nil then return error('Bad xml format') end file = {text=alt[2],encoding=alt,session={}} setmetatable(file, {__index = xml}) return file end function xml:setSess(sessname,tagname,setSess) xmlstr = self.text local f = "" for ret in xmlstr:gmatch('<'..sessname..'>(.-)</'..sessname..'>') do f = ret end if f:len() == 0 then return error('Cannot find session called '..sessname..'.') end self.session[setSess] = {f,tagname=tagname,sessname=sessname} return TRUE end function xml:getSess(SessName) return self.session[SessName] end function xml:readSess(SessName) local ret = self.session[SessName] local t,x = {},1 for xmla in ret[1]:gmatch('<'..ret.tagname..' (.-)/>') do t[x] = {} for i, v in xmla:gmatch('([^ ]-)="(.-)"') do t[x][i] = v end x = x + 1 end return t end function xml:readFree(tagname) local ret = self.text local t,x = {},1 for xmla in ret:gmatch('<'..tagname..' (.-)/>') do t[x] = {} for i, v in xmla:gmatch('([^ ]-)="(.-)"') do t[x][i] = v end x = x + 1 end return t end No proprio script tem ensinando a usar: local kind = 2 -- you can change to see another mode local XML = [==[ <?xml version="1.0" encoding="UTF-8"?> <flags> <flag summonable="0"/> <flag attackable="0"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="1"/> <flag canpushitems="1"/> <flag canpushcreatures="0"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> ]==] local read = xml:open(XML) -- or xml:open('<xml string="..../>') read:setSess('flags','flag','mysession') -- <flags>, <flag summonable="0"/>, name of this session? print(type(read:getSess('mysession'))) --- Will print on console an swtring with XML code fo session flag: <flags><flag summonab... if kind == 1 then table_ = read:readSess('mysession') else table_ = read:readFree('flag') end print('-----') for k,v in pairs(table_) do for m,n in pairs(v) do print(m,n) end end Apesar disso ainda fiz uma função adcional para aprenderem melhor ocmo se usa a lib: local XML = [==[ <?xml version="1.0" encoding="UTF-8"?> <vars> <var name="Mock" id="123"/> <var level="27"/> </vars> <vars2> <var2 name="Skyen" id="321"/> <var2 level="12"/> </vars2> ]==] local v_a = xml:open(XML) v_a:setSess('vars','var','mocksess') v_a:setSess('vars2','var2','skyensess') ret = v_a:readSess('mocksess') print(ret[1].name) ret2 = v_a:readSess('skyensess') print(ret2[1].name) Ele vai mostar no console: Mock Skyen Resumindo ele retorna uma tabela +/- assim Table = { [1] = {name="mock", id=123}, [2] = {level=12} } caso eu tenha postado na seção errada perdão poderima mover para a correta? Caso seje a seção correta ignore oq eu disse acima. Editado Agosto 4, 2009 por Mock Link para o comentário https://xtibia.com/forum/topic/117670-arquivadoeasy-xml-lib/ Compartilhar em outros sites More sharing options...
_ferrari_ 1 Postado Agosto 11, 2009 Share Postado Agosto 11, 2009 não consegui achar muitas utilidades, dá pra usar algum código em lua? Link para o comentário https://xtibia.com/forum/topic/117670-arquivadoeasy-xml-lib/#findComment-776733 Compartilhar em outros sites More sharing options...
Mock 22 Postado Agosto 15, 2009 Autor Share Postado Agosto 15, 2009 .... ._. isso é pra usar em lua, nos otservers... Link para o comentário https://xtibia.com/forum/topic/117670-arquivadoeasy-xml-lib/#findComment-778823 Compartilhar em outros sites More sharing options...
satan666 12 Postado Agosto 25, 2009 Share Postado Agosto 25, 2009 qual seria a grande utilidade de usar essa lib? Link para o comentário https://xtibia.com/forum/topic/117670-arquivadoeasy-xml-lib/#findComment-783779 Compartilhar em outros sites More sharing options...
Mock 22 Postado Agosto 29, 2009 Autor Share Postado Agosto 29, 2009 simples, pegar informações do XML rapido, facil e pratico usando isso. Vo faze um script usando isso c vai ve ^^ Link para o comentário https://xtibia.com/forum/topic/117670-arquivadoeasy-xml-lib/#findComment-785375 Compartilhar em outros sites More sharing options...
Henrique Moura 193 Postado Agosto 29, 2009 Share Postado Agosto 29, 2009 (editado) Eu achei inútil, só da o trabalho de criar isso. Abraços, Henrique. Editado Agosto 29, 2009 por KaKilo Link para o comentário https://xtibia.com/forum/topic/117670-arquivadoeasy-xml-lib/#findComment-785377 Compartilhar em outros sites More sharing options...
Mock 22 Postado Setembro 19, 2009 Autor Share Postado Setembro 19, 2009 inutil nao. vocÊ vai usar umas 30 linhas pra pegar so o HP max de um monstro no XML ou algo do loot nisso vc usa 3~4 linhas e pronto. Link para o comentário https://xtibia.com/forum/topic/117670-arquivadoeasy-xml-lib/#findComment-792811 Compartilhar em outros sites More sharing options...
Stigal 585 Postado Abril 25, 2018 Share Postado Abril 25, 2018 Esta noticia foi arquivada. Este tópico está fechado e foi movido para Noticia - Arquivo. + Caso tenha atualizações você poderá criar outro tópico. Link para o comentário https://xtibia.com/forum/topic/117670-arquivadoeasy-xml-lib/#findComment-1739211 Compartilhar em outros sites More sharing options...
Posts Recomendados