2009-06-03 15 views
8
var xml:XML = <myXml> 
        <item prop="1" /> 
        <item prop="2" /> 
       </myXml>; 

Ho bisogno di salvare come file xml nel disco fisso locale (directory del progetto).È possibile salvare il file XML in AS3

È possibile salvare in as3 stesso?

+0

La tua domanda non era molto chiara, ma la risposta era proprio quello di cui avevo bisogno. Grazie! –

risposta

3

se si desidera archiviarlo localmente (sul PC client), è possibile utilizzare un oggetto locale condiviso. Fare riferimento a questo tutorial

+0

bello! Proprio quello di cui avevo bisogno. – mheavers

1

Mi dispiace, la tua domanda non è molto chiara.

Stai chiedendo se è possibile salvare un file sul disco rigido da un SWF compilato scritto in AS3?

Oppure stai chiedendo se è possibile includere un file XML non elaborato nel progetto AS3 senza doverlo scrivere come variabile?

Se intendevi il primo, no, non senza Adobe AIR. È possibile salvare i dati localmente come SharedObject, ma non come file arbitrario nel file system.

Se quest'ultimo, allora sì, è necessario incorporare il file proprio come si incorporerebbe un'altra risorsa (ad esempio un'immagine o un suono). Tuttavia, sembra che ci possa essere un bug in Flash che rende questo non banale capire come fare.

This link might be of help to you.

[Embed(source='../../../../assets/levels/test.xml', mimeType="application/octet-stream")] 
public static const Level_Test:Class; 

E poi per analizzare il codice XML:

var ba:ByteArray = (new Levels.Level_Test()) as ByteArray; 
var s:String = ba.readUTFBytes(ba.length); 
xml = new XML(s); 

Mi scuso se nessuna di queste domande sono quello che in realtà chiedendo.

Cheers!

17

Ho gettato questo insieme, e abbastanza sicuro è possibile salvare in .XML utilizzando il seguente come un esempio minimalista.

package com.hodgedev.xmlcreator 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.utils.ByteArray; 
    import flash.net.FileReference; 

/** 
* ... 
* @author Brian Hodge ([email protected]) 
*/ 
public class Main extends Sprite 
{ 
    private var _xml:XML; 

    public function Main():void 
    { 
     if (stage) init(); 
     else addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

    private function init(e:Event = null):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 

     //Calling the save method requires user interaction and Flash Player 10 
     stage.addEventListener(MouseEvent.MOUSE_DOWN, _onMouseDown); 

     _xml= <xml> 
       <test>data</test> 
       </xml>; 
    } 
    private function _onMouseDown(e:MouseEvent):void 
    { 
     var ba:ByteArray = new ByteArray(); 
     ba.writeUTFBytes(_xml); 
     //ba. 

     var fr:FileReference = new FileReference(); 
     fr.addEventListener(Event.SELECT, _onRefSelect); 
     fr.addEventListener(Event.CANCEL, _onRefCancel); 

     fr.save(ba, "filename.xml"); 
    } 
    private function _onRefSelect(e:Event):void 
    { 
     trace('select'); 
    } 
    private function _onRefCancel(e:Event):void 
    { 
     trace('cancel'); 
    } 
} 

}

Ci sono alcune cose da notare.

  • È necessario utilizzare Flash Player 10 per utilizzare il metodo di salvataggio della classe FileReference.
  • Per fare tutto ciò che INVIA un prompt, Flash richiede l'interazione dell'utente come input da tastiera o mouse.

In quanto sopra, ascolto per MouseEvent.MOUSE_DOWN sullo stage per servire come INTERAZIONE UTENTE che è necessario per richiamare il prompt di salvataggio.

a configurare una struttura XML di base all'interno del codice (questo in genere provengono e sorgente esterna e funziona bene in entrambi i sensi.

Un ByteArray viene creato e l'XML è scritto al ByteArray.

Il metodo di salvataggio della classe FileReference richiede un valore ByteArray e il nome di salvataggio predefinito deve essere passato come i due parametri.

Spero che questo aiuti.

+0

So che questo post è vecchio, ma questa è esattamente la risposta di cui avevo bisogno eccetto, come si scrive l'xml usando un ciclo for? Per esempio. Ho un array 2D contenente dati di trame. Voglio creare una mappa xml di collisione basata sulla mappa xml delle trame. Come, come si fa: 'var xml: XML = /* per loop */'? – DevITper

+0

usa il ciclo for per creare l'attuale xml, quindi mandalo via! var s: String; // Ommit il seguente, se lo desideri, il flash non lo usa, ma se il file è condiviso tra front e backend, potresti desiderare di avere quel tag. –

+1

s = ""; s.appendText (""); // Sentiti libero di ripetere il ciclo come desideri, ad es. per (var i: int; i "); } s.appendText (""); Questo è ovviamente generico, ma dovrebbe farti andare. var xml: XML = s; –

Problemi correlati