2009-06-03 19 views
8
var xml:XML = <myXml> 
        <item prop="1" /> 
        <item prop="2" /> 
       </myXml>; 

ローカルハードディスク(プロジェクトディレクトリ)にxmlファイルとして保存する必要があります。AS3でXMLファイルを保存することができます

as3自体で保存することはできますか?

+0

あなたの質問はあまり明確ではありませんでしたが、答えは必要なものでした。ありがとう! –

答えて

3

ローカルに(クライアントPC上に)保存する場合は、ローカル共有オブジェクトを使用できます。これを参照してくださいtutorial

+0

nice!ちょうど私が必要なもの。 – mheavers

1

申し訳ありませんが、あなたの質問はあまり明確ではありません。

AS3で書かれたコンパイルSWF内からファイルをハードドライブに保存できるかどうか尋ねていますか?

または、変数として書き出すことなく、生のXMLファイルをAS3プロジェクトに含めることができるかどうかを尋ねていますか?

前者の場合は、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); 

謝罪を。

乾杯!

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 ([email protected]) 
*/ 
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クラスの保存メソッドを使用する必要があります。
  • プロンプトを呼び出すことを行うには、キーボード入力やマウス入力などのユーザー操作が必要です。

上記では、保存プロンプトを呼び出すために必要なUSER INTERACTIONとして機能するステージ上のMouseEvent.MOUSE_DOWNをリッスンします。

Iセットアップコード内の基本的なXML構造(これは通常から来て、外部ソースとの両方の方法を正常に動作しますします。

ByteArrayが作成され、XMLがByteArrayに書かれている。

FileReferenceクラスのsaveメソッドはByteArrayで、デフォルトの保存名を2つのパラメータとして渡す必要があります。

こちらがお役に立てば幸いです。

+0

私はこの記事が古いことを知っていますが、これはまさに私が必要とする答えです。forループを使ってxmlを書くにはどうすればいいですか?例えば。私はテクスチャのデータを含む2D配列を持っています。私は、テクスチャXMLマップに基づいて衝突のXMLマップを作成したいと思います。 どうすればいいですか? 'var xml:XML = /* forループ*/'? – DevITper

+0

forループを使って実際のxmlを構築し、彼女を送ります! var s:文字列。 //必要ならば、フラッシュはそれを使用しませんが、ファイルがフロントエンドとバックエンドの間で共有されている場合は、そのタグを持つことをお勧めします。 –

+1

s = "<?xml version =" 1.0 "encoding =" utf-8 ">"; s.appendText( ""); //自由にループすることができます。 for(var i:int; i "); } s.appendText( ""); これは明らかに一般的なことですが、あなたを連れて行く必要があります。 var xml:XML = s; –

関連する問題