ActionScript 3.0で始めるオブジェクト指向スクリプティング

第27回 XMLデータを扱う

この記事を読むのに必要な時間:およそ 3.5 分

前回の第26回は 外部データの読込み待ちについて説明した。今回は,外部データとしてもよく用いられるXMLデータの扱いだ。ActionScript 3.0におけるXMLの仕様は,「ECMAScript for XML(E4X)」に準拠する※1)。なお,本連載ではXML自体の説明は予定していないので,必要があればWebや参考書などで学習してほしい。

※1
E4Xの仕様はECMAScript for XML (E4X) Specificationとして第2版が公開されている。また,ボランティアの方が日本語訳されたECMAScript for XML (E4X) 仕様邦訳も参考になる。

外部XMLデータの読込み

まずは,前回の復習も兼ねて,外部XMLファイルを読込んでみよう。用いるのはURLLoaderクラスだ。前回学習したとおり,ロード待ちの処理が必要になる。XMLデータはつぎのように作成して,"adobe_cs4.xml"という名前でFlashムービー(FLA)ファイルと同じ階層に保存しておく。

<?xml version="1.0" encoding="UTF-8"?>
<cs4>
  <product suite="Web">
    <name>Flash CS4 Professional</name>
    <price>699</price>
  </product>
  <product suite="Web">
    <name>Dreamweaver CS4</name>
    <price>399</price>
  </product>
  <product suite="Design">
    <name>Photoshop CS4</name>
    <price>699</price>
  </product>
  <product suite="Design">
    <name>Illustrator CS4</name>
    <price>599</price>
  </product>
</cs4>

URLLoaderクラスで外部XMLファイルを読込むフレームアクションは,以下のスクリプト1のとおりだ。ロード待ちまでの構成は,前回のスクリプト2と基本的に変わらない。

スクリプト1 URLLoaderクラスで外部XMLファイルをロードしてTextFieldインスタンスに設定する

// フレームアクション
// フレームアクション
var _txt:TextField = new TextField();
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest("adobe_cs4.xml");
addChild(_txt);
_txt.autoSize = TextFieldAutoSize.LEFT;
_txt.wordWrap = true;
myLoader.addEventListener(Event.COMPLETE, xSetText);
myLoader.load(myRequest);
function xSetText(eventObject:Event):void {
  var cs4_xml:XML = XML(myLoader.data);   // テキストをXMLデータに変換
  // 以下の2行のステートメントについては後述
  var product_web:XMLList = cs4_xml.product.(@suite == "Web");
  var name_str:String = product_web[0].name.toString();
  _txt.text = name_str;
}

外部XMLファイルロードした後,テキストデータをXMLとして解釈する必要がある。それが XML()関数だ。引数にテキストデータ(文字列)を渡せば,XMLに変換して返す。そのつぎの処理は,XMLデータから,<product>要素のsuite 属性が"Web"のノード群を取出し,その最初(インデックス0)のノードの製品名である<name>要素のテキストを,TextField インスタンスに設定している図1)。XMLを扱うこの2行のステートメントについては,この後項を改めて解説する。

図1 ロードしたXMLデータから指定の製品名をTextFieldインスタンスに設定して表示

図1 ロードしたXMLデータから指定の製品名をTextFieldインスタンスに設定して表示

XMLデータから必要な値を取出す

つぎは,XMLデータから必要な値を指定して取出す方法を紹介する。その前に,スクリプトをできるだけシンプルにするため,XMLデータは外部ファイルから読込まず,XMLインスタンスとして生成しよう。

XMLデータはスクリプト上で,つぎのようにタグ(<>)を使って記述する※2)。変数(プロパティ)や関数(メソッド)から値を取出すのでなく,このように直接プログラムに記述される値を「リテラル」という(第17回 3D風に回転するアニメーション注※4参照)。データ型の指定はXMLだ。

var cs4_xml:XML =
<cs4>
  <product suite="Web">
    <name>Flash CS4 Professional</name>
    <price>699</price>
  </product>
  <product suite="Web">
    <name>Dreamweaver CS4</name>
    <price>399</price>
  </product>
  <product suite="Design">
    <name>Photoshop CS4</name>
    <price>699</price>
  </product>
  <product suite="Design">
    <name>Illustrator CS4</name>
    <price>599</price>
  </product>
</cs4>;

XMLインスタンスをtrace()関数で[出力]すると,XMLデータの内容がそのまま文字列として表示される図2)。

図2 trace()関数でXMLインスタンスのデータが文字列として表示される

図2 trace()関数でXMLインスタンスのデータが文字列として表示される

※2
XMLデータの最後にセミコロン(;)をつけないと,[自動フォーマット]したときにシンタックスエラーになるので注意しよう。もっとも,[シンタックスチェック]してもエラーは出ず,コンパイル(SWFファイルの書出し)も問題なく行われる。

著者プロフィール

野中文雄(のなかふみお)

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(MBA)。独立系パソコン販売会社で,総務・人事,企画,外資系企業担当営業などに携わる。その後,マルチメディアコンテンツ制作会社に転職。ソフトウェアトレーニング,コンテンツ制作などの業務を担当する。2001年11月に独立。Web制作者に向けた情報発信プロジェクトF-siteにも参加する。株式会社ロクナナ取締役(非常勤)。

URLhttp://www.FumioNonaka.com/

著書

コメント

コメントの記入