ActionScript 3.0で始めるオブジェクト指向スクリプティング
第27回 XMLデータを扱う
前回の第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行のステートメントについては,この後項を改めて解説する。
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
- XMLデータの最後にセミコロン(;)をつけないと,[自動フォーマット]したときにシンタックスエラーになるので注意しよう。もっとも,[シンタックスチェック]してもエラーは出ず,コンパイル(SWFファイルの書出し)も問題なく行われる。


