速習Webデザイン ActionScript3.0を読む その9

速習Webデザイン ActionScript 3.0

速習Webデザイン ActionScript 3.0

part7 外部ファイルの読み込み のつづき

  • 02-01 XMLファイルの読み込み
    • 引き続き超実践的!!!
    • XMLファイルの読み込みにはURLLoaderクラスを使う。
    • URLLoaderクラスはXMLファイルをテキストデータとして読み込みURLLoaderオブジェクトのdataプロパティに格納される。
    • dataプロパティを取得できるのはファイルのダウンロード終了後であり非同期処理が必要*1
    • スクリプト例は以下。

var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE,xComplete);
xmlLoader.load(new URLRequest("sample.xml") );
function xComplete(evt:Event):void{
  trace(xmlLoader.data);
  }

p191

    • Flash Playerは外部ファイルを読み込む時、デフォルトでは文字コードUnicode(UTF-8)として解釈する。
    • 文字コードがらみはちゃんと覚えておかないとドツボにはまりそう。。。
    • 「System.useCodePage = true;」とすることでテキストファイルをOSの通常コードとして解釈させることが出来る。
  • 02-02
    • XMLファイルをテキストデータとして読み込んだらXMLクラスやXMLListクラスを使って効率よく管理することが出来る。
    • XMLテキストは次の書式でXMLオブジェクトに変換できる。

var 変数 :XML = new XML(XMLテキスト);

    • XMLオブジェクトは単一のノードの情報を管理できる。
    • 子ノードは「XMLオブジェクト.ノード名」で抽出でき、複数ある場合はXMLListオブジェクトとして扱われる。
    • XMLListオブジェクトはArrayオブジェクト同様forステートメントの利用で一括処理できる。
    • for each ・・・ inステートメントを使うとXMLListオブジェクトが保持するXMLオブジェクトの数だけ繰り返し処理を行い変数にXMLList内のオブジェクトが代入されていく。

for each(変数 in XMLListオブジェクト)[(条件)]{
  処理
}

    • 「(条件)」で条件抽出も可能
  • 02-04
    • ポストカードカタログ制作サンプルもXML仕様に改造。
    • XML処理は独立性が高いため、今までの処理を第2フレームに移し、第1フレームにXML処理を記述と。なるー。
    • このとき、読み込みが終了する前にフレームが進んでしまわないようにstop()をかけておく。なるー。
  • Let's TRY!!
    • ブログチックなXMLFlash上に書き出す課題。

var blogXml:URLLoader = new URLLoader();
blogXml.addEventListener(Event.COMPLETE, xComplete);
blogXml.load(new URLRequest("try.xml"));
function xComplete(evt:Event):void{
  var tempXml:XML = new XML(blogXml.data);
  var subNode:XMLList =tempXml.diary;
  subject_txt.text = subNode[0].@subject;
  date_txt.text = subNode[0].@date;
  content_txt.text = subNode[0].toString();
}

try_07-02_00.fla

    • 最後の行を「content_txt.text = subNode[0].diary.toString();」としてて本文だけ書き出されなかったけど、よく考えたらtempXmlにはdiaryタグまんまが代入されているので「.diary」は必要ありませんね。
    • 属性値には必要なく、ノードの値には「toString」が必要というのが忘れちゃいそう。
    • この課題のページ(p200)には2カ所も誤植が!!!!

*1:画像読み込みの時は読み込み完了用のイベントハンドラをLoaderオブジェクトのcontentLoaderInfoプロパティに設定したが、XMLファイルの読み込み完了用イベントハンドラはLoaderオブジェクトに直接設定できる。とのこと。