var xml:XML = <myXml>
<item prop="1" />
<item prop="2" />
</myXml>;
我需要将xml文件另存为本地硬盘(项目目录)。
是否可以保存as3本身?
答案 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');
}
}
}
有一些事情要注意。
FileReference
类的保存方法。在上面我在舞台上监听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 );
道歉,如果这些问题都不是你实际问的问题。
干杯!