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

Ich muss als XML-Datei in der lokalen Festplatte (Projektverzeichnis) speichern.Speichern von XML-Datei in AS3 ist möglich

Ist es möglich, in as3 selbst zu speichern?

+0

Ihre Frage war nicht sehr klar, aber die Antwort war genau das, was ich brauchte. Vielen Dank! –

Antwort

3

Wenn Sie es lokal (auf dem Client-PC) speichern möchten, können Sie ein lokales gemeinsames Objekt verwenden. Siehe hierzu tutorial

+0

nett! Genau das, was ich brauchte. – mheavers

1

Es tut mir leid, Ihre Frage ist nicht sehr klar.

Fragen Sie, ob Sie eine Datei von einer in AS3 geschriebenen Kompilierungs-SWF auf die Festplatte speichern können?

Oder fragen Sie, ob Sie eine XML-Rohdatei in Ihr AS3-Projekt einfügen können, ohne sie als Variable ausgeben zu müssen?

Wenn Sie das ehemalige gemeint, nein - nicht ohne Adobe AIR. Sie können Daten lokal als SharedObject speichern, jedoch nicht als beliebige Datei im Dateisystem.

Wenn Letzteres, dann ja - Sie müssen die Datei so einbetten, wie Sie eine andere Ressource (z. B. ein Bild oder einen Sound) einbetten würden. Es sieht jedoch so aus, als ob es einen Fehler in Flash geben könnte, der das nicht-trivial macht, um herauszufinden, wie es geht.

This link might be of help to you.

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

Und dann die XML zu analysieren:

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

Entschuldigt, wenn keine dieser Fragen sind, was Sie eigentlich fragen wurden.

Prost!

17

Ich warf dies zusammen, und sicher genug können Sie .XML mit dem folgenden als ein minimalistisches Beispiel speichern.

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'); 
    } 
} 

}

Es gibt einige Dinge zu beachten.

  • Sie benötigen Flash Player 10, um die Speichermethode FileReference zu verwenden.
  • Um alles zu tun, was eine Eingabeaufforderung ergibt, erfordert Flash Benutzerinteraktion wie Tastatur- oder Mauseingabe.
  • In den oben genannten höre ich für MouseEvent.MOUSE_DOWN auf der Bühne, um als die USER INTERACTION zu dienen, die erforderlich ist, um die Speicheraufforderung aufzurufen.

    ich Setup eine grundlegende XML-Struktur innerhalb des Codes (dies wird von und externer Quelle der Regel kommt und wird in beiden Richtungen funktioniert.

    A ByteArray erstellt wird und die XML an die ByteArray geschrieben.

    Die Speichermethode der Klasse FileReference erfordert ByteArray. Der Standardspeichername wird als zwei Parameter übergeben.

    Ich hoffe, das hilft.

    +0

    Ich weiß, dass dieser Beitrag alt ist, aber das ist genau die Antwort, die ich brauchte außer, wie schreibe ich das XML mit einer For-Schleife? Z.B. Ich habe ein 2D-Array mit Daten von Texturen. Ich möchte eine Kollisions-XML-Map erstellen, die auf der Textur-XML-Map basiert. Wie, wie machst du: 'var xml: XML = /* forschleife */'? – DevITper

    +0

    Verwenden Sie die for-Schleife, um die eigentliche XML-Datei zu erstellen, und senden Sie sie dann ab! var s: Zeichenfolge; // Überlegen Sie Folgendes, wenn Sie möchten, Flash verwendet es nicht, aber wenn die Datei zwischen Front-und Back-End geteilt wird, möchten Sie vielleicht dieses Tag haben. –

    +1

    s = ""; s.appendText (""); // Fühlen Sie sich frei, wie Sie wünschen, z. für (var i: int; i "); } s.appendText (""); Dies ist offensichtlich generisch, aber sollte Sie in Gang bringen. var xml: XML = s; –

    Verwandte Themen