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)
}
有一些事情需要注意.
FileReference该类的save方法.在上面我MouseEvent.MOUSE_DOWN在舞台上监听,作为调用保存提示所需的用户交互.
我在代码中设置了一个基本的XML结构(这通常来自和外部源,并且可以在两种方式下正常工作.
一个ByteArray创建和XML写入ByteArray.
类的save方法FileReference需要将ByteArray默认保存名称作为两个参数传递.
我希望这有帮助.
抱歉,你的问题不太清楚。
您是否询问是否可以从用 AS3 编写的编译 SWF 中将文件保存到硬盘驱动器?
或者您是否想知道是否可以在 AS3 项目中包含原始 XML 文件而不需要将其作为变量写出?
如果您指的是前者,那么不,没有 Adobe 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)
如果这些问题都不是您真正要问的问题,我深表歉意。
干杯!