diegolauro 0 Denunciar post Postado Julho 17, 2009 Então, tive também a brilhante idéia de fazer uma classe que carregasse para mim o XML. Com isso, todo o projeto que uso XML poderia aproveitá-la. Com pesquisas na internet consegui adaptá-la. Eu passo o arquivo XML e ela carrega bonitinho. Porém, na Timeline, lah no Fla eu queria recebê-la como um Xml e usá-la da seguinte maneira: nomedaClasse.primeiro[0].segundo[0] Nada além do convencional, pois preciso resgatar os valores contidos no XML. O que eu preciso fazer para ele me retornar algo manipulável, como eu preciso? Esta é a classe: // // LoadXML // // Created by Ben Honda-Rottler on 2007-06-01. Based on original code by Alessandro Crugnola // package core{ import flash.net.URLLoader import flash.net.URLRequest import flash.xml.XMLDocument; import flash.errors.* import flash.events.* public class LoadXML { private var loader : URLLoader; private var mainXML : XML; public function CarregarXML(arquivo:String) { loader = new URLLoader(); loader.addEventListener(Event.COMPLETE, onComplete); loader.load(new URLRequest(arquivo)); } private function onComplete(evt:Event) { try { mainXML = new XML(loader.data) return mainXML; } catch(e:Error) { trace("Error: " + e.message) return; } } } } E aqui está o que eu chamo na Timeline: import core.LoadXML; var xmlLoader:LoadXML = new LoadXML(); xmlLoader.CarregarXML("xml/lugares.xml"); Eu trabalhava bastante com AS2, mas estou me aventurando agora no conceito de classes. Espero receber alguma dica. Vlw gente! Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Julho 22, 2009 bastaria deixar a variavel "mainXML" como public, e na função onComplete, tirar os "return" então para acessar ficaria: nomedaClasse.mainXML.primeiro[0].segundo[0] você pode colocar uns método get para acessar essa variável para não ter perigo te altera-la []´s Compartilhar este post Link para o post Compartilhar em outros sites
Andre Cocuroci 0 Denunciar post Postado Julho 29, 2009 Eder, como funcionaria esses metodos GET? Teria algum exemplo? Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Julho 29, 2009 ao invés de usar: nomedaClasse.mainXML.primeiro[0].segundo[0] você usaria: nomedaClasse.dados.primeiro[0].segundo[0] então dentro da classe você deixa: private var mainXML : XML; public function get dados():XML{ return mainXML } assim o mainXML fica private, e não pode ser acessado diretamente ou alterado []ps Compartilhar este post Link para o post Compartilhar em outros sites
Andre Cocuroci 0 Denunciar post Postado Julho 29, 2009 Eder, precisa utilizar esse get na função? Sem ele não funciona? Tem alguma documentação sobre isso? Compartilhar este post Link para o post Compartilhar em outros sites
diegolauro 0 Denunciar post Postado Julho 31, 2009 deu certo, ficou assim minha classe: // // LoadXML // // Based on original code by Alessandro Crugnola. // Created by Ben Honda-Rottler on 2007-06-01. // Modified by Diego Lauro on 2009-07-15. // package core{ import flash.net.URLLoader import flash.net.URLRequest import flash.xml.XMLDocument import flash.errors.* import flash.events.* public class LoadXML extends EventDispatcher { private var loader : URLLoader; public var mainXML : XML; public function CarregarXML(arquivo:String) { loader = new URLLoader(); loader.addEventListener(Event.COMPLETE, onComplete); loader.load(new URLRequest(arquivo)); } private function onComplete(evt:Event) { try { mainXML = new XML(loader.data); } catch(e:Error) { trace("Error: " + e.message) return; } dispatchEvent( evt ); } public function get returnData() { return mainXML; } } } E faço agora as chamadas no SWF assim: import core.LoadXML; var xmlLoader:LoadXML = new LoadXML(); var xmlLugar:XML; //Load XML carregaXML("xml/lugares.xml") function carregaXML(arquivo):void{ xmlLoader.CarregarXML(arquivo); xmlLoader.addEventListener( Event.COMPLETE, onRequestComplete, false, 0, true); } function onRequestComplete(evt:Event ):void{ xmlLugar = evt.target.returnData; trace(xmlLugar.lugar[0].imagem[0]); } Eu estou com novos problemas agora, acho só que vou colocar em outro Post para não cunfundir ninguém que estiver procurando informações sobre o problema do retorno de classes. Obrigado a todos. ps: Podem usar a classe acima, ela é bem prática. Compartilhar este post Link para o post Compartilhar em outros sites