可以在AS3中保存XML文件

vin*_*eth 8 actionscript-3

var xml:XML = <myXml>
                    <item prop="1" />
                    <item prop="2" />
                </myXml>;
Run Code Online (Sandbox Code Playgroud)

我需要在本地硬盘(项目目录)中保存为xml文件.

是否可以保存as3本身?

Bri*_*dge 17

我把它扔在一起,当然你可以使用以下作为极简主义的例子保存到.XML.

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 (brian@hodgedev.com)
 */
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');
    }
}
Run Code Online (Sandbox Code Playgroud)

}

有一些事情需要注意.

  • 您需要Flash Player 10才能使用FileReference该类的save方法.
  • 为了做任何隐藏提示的事情,Flash需要用户交互,如键盘或鼠标输入.

在上面我MouseEvent.MOUSE_DOWN在舞台上监听,作为调用保存提示所需的用户交互.

我在代码中设置了一个基本的XML结构(这通常来自和外部源,并且可以在两种方式下正常工作.

一个ByteArray创建和XML写入ByteArray.

类的save方法FileReference需要将ByteArray默认保存名称作为两个参数传递.

我希望这有帮助.


Han*_*nto 1

抱歉,你的问题不太清楚。

您是否询问是否可以从用 AS3 编写的编译 SWF 中将文件保存到硬盘驱动器?

或者您是否想知道是否可以在 AS3 项目中包含原始 XML 文件而不需要将其作为变量写出?

如果您指的是前者,那么不,没有 Adob​​e AIR 就不行。您可以将数据本地保存为 SharedObject,但不能保存为文件系统中的任意文件。

如果是后者,那么是的——您必须嵌入该文件,就像嵌入其他资源(例如图像或声音)一样。然而,Flash 中似乎可能存在一个错误,使得弄清楚如何执行此操作并非易事。

此链接可能对您有帮助。

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

然后解析 XML:

var ba:ByteArray = (new Levels.Level_Test()) as ByteArray;
var s:String = ba.readUTFBytes( ba.length );
xml = new XML( s );
Run Code Online (Sandbox Code Playgroud)

如果这些问题都不是您真正要问的问题,我深表歉意。

干杯!