Возможно сохранение XML-файла в AS3 - PullRequest
8 голосов
/ 03 июня 2009
var xml:XML = <myXml>
                    <item prop="1" />
                    <item prop="2" />
                </myXml>;

Мне нужно сохранить как XML-файл на локальном жестком диске (в каталоге проекта).

Возможно ли сохранить в самой as3?

Ответы [ 3 ]

17 голосов
/ 29 августа 2009

Я скомбинировал это, и, конечно, вы можете сохранить в .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.
  • Чтобы выполнить все, что вызывает приглашение, Flash требует взаимодействия с пользователем, например ввода с клавиатуры или мыши.

В приведенном выше тексте я слушаю MouseEvent.MOUSE_DOWN на сцене, чтобы служить ВЗАИМОДЕЙСТВИЕМ ПОЛЬЗОВАТЕЛЯ, которое требуется для вызова приглашения сохранения.

Я установил базовую структуру XML в коде (обычно она поступает из внешнего источника и отлично работает в обоих направлениях.

A ByteArray создан и XML записан в ByteArray.

Метод сохранения класса FileReference требует ByteArray и имя сохранения по умолчанию, передаваемое в качестве двух параметров.

Надеюсь, это поможет.

3 голосов
/ 03 июня 2009

если вы хотите сохранить его локально (на клиентском ПК), вы можете использовать локальный общий объект. Обратитесь к этому учебнику

1 голос
/ 03 июня 2009

Извините, ваш вопрос не очень понятен.

Вы спрашиваете, можете ли вы сохранить файл на жесткий диск из SWF-файла компиляции, написанного на AS3?

Или вы спрашиваете, можете ли вы включить необработанный XML-файл в проект AS3 без необходимости записывать его в виде переменной?

Если вы имели в виду первое, нет - не без 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 );

Извинения, если ни один из этих вопросов не является тем, что вы на самом деле задавали.

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...