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

Necesito guardar como archivo xml en el disco duro local (directorio del proyecto).Guardar archivo XML en AS3 es posible

¿Es posible guardar en as3?

+0

Su pregunta no era muy clara, pero la respuesta fue justo lo que necesitaba. ¡Gracias! –

Respuesta

3

si desea almacenarlo localmente (en la PC del cliente), puede utilizar un objeto compartido local. Consulte este tutorial

+0

¡agradable! Justo lo que necesitaba. – mheavers

1

Lo siento, su pregunta no es muy clara.

¿Está preguntando si puede guardar un archivo en el disco duro desde un archivo SWF de compilación escrito en AS3?

¿O está preguntando si puede incluir un archivo XML sin formato en su proyecto AS3 sin necesidad de escribirlo como una variable?

Si se refería a lo primero, no, sin Adobe AIR. Puede guardar datos localmente como SharedObject, pero no como un archivo arbitrario en el sistema de archivos.

En este último caso, entonces sí: debe incrustar el archivo tal como lo haría con otro recurso (como una imagen o un sonido). Sin embargo, parece que podría haber un error en Flash que hace que esto no sea trivial para descubrir cómo hacerlo.

This link might be of help to you.

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

Y luego a analizar el código XML:

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

Disculpas si ninguna de estas preguntas son lo que eran en realidad pidiendo.

¡Salud!

17

Tiré esto, y de hecho lo puedes guardar en .XML usando lo siguiente como ejemplo 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'); 
    } 
} 

}

hay algunas cosas a tener en cuenta.

  • Se requieren Flash Player 10 para usar el método de la clase FileReference guardar.
  • Para hacer cualquier cosa que INVOQUE un aviso, Flash requiere la interacción del usuario como la entrada del teclado o del mouse.

En lo anterior escucho el MouseEvent.MOUSE_DOWN en el escenario para que sirva como la INTERACCIÓN DEL USUARIO que se requiere para invocar el aviso de guardado.

I fijó una estructura XML básica dentro del código (esto normalmente vendrá desde una fuente externa y no tendrán ningún problema en ambos sentidos.

se crea un ByteArray y el XML se escribe en el ByteArray.

El método de guardado de la clase FileReference requiere un ByteArray y el nombre guardado predeterminado se pasa como los dos parámetros.

Espero que esto ayude.

+0

Sé que esta publicación es antigua, pero esta es exactamente la respuesta que necesitaba, excepto, ¿cómo escribir el xml usando un ciclo for? P.ej. Tengo una matriz 2D que contiene datos de texturas. Quiero crear un mapa de colisión xml basado en el mapa texturas xml. Me gusta, ¿cómo se hace: 'var xml: XML = /* for loop */'? – DevITper

+0

usa el bucle for para construir el xml real, ¡y despídela! var s: Cadena; // Omita lo siguiente, si lo desea, el flash no lo usa, pero si el archivo se comparte entre el frente y el backend, es posible que desee tener esa etiqueta. –

+1

s = ""; s.appendText (""); // Siéntase libre de repetir como desee, p. for (var i: int; i "); } s.appendText (""); Esto es obviamente genérico, pero debería hacerlo funcionar. var xml: XML = s; –

Cuestiones relacionadas