var xml:XML = <myXml>
<item prop="1" />
<item prop="2" />
</myXml>;
我需要将文件保存为XML格式到本地硬盘(项目目录)。
是否可以在AS3中直接保存?
var xml:XML = <myXml>
<item prop="1" />
<item prop="2" />
</myXml>;
我需要将文件保存为XML格式到本地硬盘(项目目录)。
是否可以在AS3中直接保存?
我匆匆忙忙写了这个,确实可以使用以下最简化的示例将数据保存为 .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');
}
}
}
需要注意以下几点:
FileReference
类的保存方法需要Flash Player 10。在上述代码中,我监听舞台上的MouseEvent.MOUSE_DOWN
事件以作为必须的用户交互,以调用保存提示框。
我在代码中设置了一个基本的XML结构(通常从外部来源获取),并且两种方式都可以正常工作。
创建了一个ByteArray
并将XML写入其中。
FileReference
类的保存方法要求传递两个参数:一个是ByteArray
,另一个是默认的保存名称。
希望这有所帮助。
var xml:XML = <data> /*for loop*/ <data>
? - Davina Leong很抱歉,您的问题不是很清楚。
您是在问是否可以从AS3编写的编译SWF中保存文件到硬盘吗?
还是在问是否可以在AS3项目中包含原始XML文件而无需将其写成变量?
如果您指的是前者,则不行——除非使用Adobe AIR。您可以将数据保存在本地作为SharedObject,但不能作为文件系统中的任意文件。
如果是后者,则是的——您必须像嵌入其他资源(如图像或声音)一样嵌入该文件。然而,看起来Flash中可能存在一个错误,使得这个过程不容易理解。
[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 );
如果这两个问题都不是你实际想问的,那我很抱歉。
谢谢!