Opa.
Resolvi criar este post pois ja havia feito isso para trabalho de faculdade, então, compratilhando o conhecimento adquirido.
Segue abaixo aplicação e os fonte com as explicações:
Clique em Listar e depois salvar.
xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundColor="white"> ? <mx:Script> [CDATA[ import mx.rpc.xml.SimpleXMLEncoder; import mx.utils.ObjectUtil; import mx.controls.Alert; import mx.collections.ArrayCollection; ? private var fr:FileReference; private static const FILE_TYPES:Array=[new FileFilter("Arquivo XML", "*.xml")]; private static const DEFAULT_FILE_NAME:String="trabalho.xml"; [Bindable] public var arr:ArrayCollection=new ArrayCollection( [{id:1, nome:"Felipe Borella", cidade:"Marau"}, {id:2, nome:"Mario Junior", cidade:"Rio de Janeiro"}, {id:3, nome:"Bãrdei Futebol Clube", cidade:"Marau"}, {id:4, nome:"Janderson Futebol Clube", cidade:"Rio de Janeiro"}]); ? private function iniciar():void { var xml:XML=objectToXML(arr.source); txt1.text=ObjectUtil.toString(arr.source); txt2.text=xml.toXMLString(); } ? ? private function objectToXML(obj:Object):XML { var qName:QName=new QName("pessoa"); var xmlDocument:XMLDocument=new XMLDocument(); var simpleXMLEncoder:SimpleXMLEncoder=new SimpleXMLEncoder(xmlDocument); var xmlNode:XMLNode=simpleXMLEncoder.encodeValue(obj, qName, xmlDocument); var xml:XML=new XML(xmlDocument.toString()); trace(xml.toXMLString()); return xml; } ? private function onLoadFileClick():void { //cria a instancia do FileReference fr=new FileReference(); //adiciona o evento para a escuta quando o arquivo for selecionado fr.addEventListener(Event.SELECT, onFileSelect); //adiciona o evento para a escuta quando o arquivo for cancelado fr.addEventListener(Event.CANCEL, onCancel); //abri somente arquivos XML fr.browse(FILE_TYPES); } ? //chamado quando o usuario seleciona o arquivo private function onFileSelect(e:Event):void { //quando o arquivo for carregado dispara a escuta da funcao onLoadComplete fr.addEventListener(Event.COMPLETE, onLoadComplete); // adiciona a escuta quando acontece erro ao carregar arquivo fr.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); //carrega o conteudo do arquivo fr.load(); } ? //Chamado quando o usuario cancela private function onCancel(e:Event):void { trace("File Browse Canceled"); fr=null; } ? //chama completa o arquivo carregado private function onLoadComplete(e:Event):void { //recupera os dados do arquivo como um byte array var data:ByteArray=fr.data; //le o arquivo como uma string e coloca em um text area txt2.text=data.readUTFBytes(data.bytesAvailable); //limpa a instancia do arquivo tipo filereference fr=null; } ? //quando ocorrer erros ao carregar private function onLoadError(e:IOErrorEvent):void { trace("Error loading file : " + e.text); } ? //chamadoquando o usuario digita no textarea private function onInputChange():void { //habilita o botao se ha texto para salvar saveButton.enabled=(txt2.text.length > 0); } ? //chamado quando o usuario clica o botao de carregar private function onSaveClick():void { //criando instancia de File Reference fr=new FileReference(); ? //escuta para falha quando foi salvo fr.addEventListener(Event.COMPLETE, onFileSave); ? //escuta para quando cancelar fr.addEventListener(Event.CANCEL, onCancel); ? //escuta para quando ha erros no salvar fr.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); ? //abre a caixa para saber onde salvar o XML usando o nome default fr.save('n'+txt2.text, DEFAULT_FILE_NAME); } ? //chamado quando o arquivo for salvo private function onFileSave(e:Event):void { trace("File Saved"); fr=null; Alert.show('Salvo com sucesso'); } ? //chamado se o usuario cancela a caixa de dialogo private function onCance2l(e:Event):void { Alert.show('Arquivo cancelado', 'Sistema'); fr=null; } ? //chamado se ocorrer erro enquanto salva o arquivo private function onSaveError(e:IOErrorEvent):void { Alert.show('Erro '+ e.text); fr=null; } ]]> mx:Script> ? <mx:DataGrid x="10" y="10" dataProvider="{arr}" width="299"> <mx:columns> <mx:DataGridColumn headerText="Nome" dataField="nome"/> <mx:DataGridColumn headerText="Cidade" dataField="cidade"/> mx:columns> mx:DataGrid> <mx:Button id="saveButton" x="412" y="130" label="Salvar" click="onSaveClick()"/> <mx:TextArea id="txt1" x="10" y="175" width="228" height="231" editable="false"/> <mx:TextArea id="txt2" x="246" y="175" width="228" height="231" editable="false"/> <mx:Button x="346" y="130" label="Listar" click="iniciar()"/> ? mx:Application>
Valeu ai!
Felipe
Marau-RS







