可以在AS3中保存XML文件

时间:2009-06-03 14:28:02

标签: actionscript-3

var xml:XML = <myXml>
                    <item prop="1" />
                    <item prop="2" />
                </myXml>;

我需要将xml文件另存为本地硬盘(项目目录)。

是否可以保存as3本身?

3 个答案:

答案 0 :(得分: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');
    }
}

}

有一些事情要注意。

  • 您需要Flash Player 10才能使用FileReference类的保存方法。
  • 为了执行隐藏提示的任何操作,Flash需要用户交互,如键盘或鼠标输入。

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

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

创建ByteArray并将XML写入ByteArray

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

我希望这会有所帮助。

答案 1 :(得分:3)

如果要将其存储在本地(在客户端PC上),则可以使用本地共享对象。请参阅此tutorial

答案 2 :(得分:1)

对不起,你的问题不是很清楚。

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

或者您是否在询问是否可以在AS3项目中包含原始XML文件而无需将其作为变量写出来?

如果你的意思是前者,不是 - 不是没有Adobe AIR。您可以在本地将数据保存为SharedObject,但不能将其保存为文件系统中的任意文件。

如果是后者,那么是 - 您必须像嵌入其他资源(例如图像或声音)一样嵌入文件。但是,看起来Flash中可能存在一个错误,这使得如何解决这个问题变得非常重要。

This link might be of help to you.

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

然后解析XML:

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

道歉,如果这些问题都不是你实际问的问题。

干杯!