Flash CS3が備えるActionScript3.0では,XML形式(eXtensible Markup Language形式)のデータを扱うための「XMLクラス」が,格段に扱いやすくなりました。XMLをそのままコード内に記述したり,E4Xで定められた記法を使って,各要素へと簡単にアクセスができるようになっています。

 最近ではXML形式のデータを介したデータのやり取りや,Webサービスなども盛んなので,知っておくと大変便利なクラスです。今回は,XMLデータの読み込み・生成から,個々の要素へのアクセスの方法や抽出方法についてご紹介します。

 図1では,Flashムービーと同じディレクトリにある「xmlData.xml」という名前のXMLファイルを読み込んで,その内容を表示しています。また,ムービー右上のコンボボックスを操作すると,読み込んだXMLデータから,任意の物を抽出して表示します。

図1●XMLデータを読み込んで表示するサンプル
図1●XMLデータを読み込んで表示するサンプル
[クリックすると別ウィンドウでムービーを開きます。サンプル・ファイルはこちらからダウンロードできます]

外部のXMLデータを読み込む

 XMLクラスのインスタンスの生成方法は,他のクラスと同じです。new演算子を使うだけです。

var xml:XML = new XML();

 しかし,XML形式のデータを扱う場合は,おそらく,すでにどこかにあるXMLファイルを読み込んだり,何らかの構造をもったデータを自分で用意することがほとんどでしょう。そのため,上記のような,まっさらなXMLの作成をするよりも,いきなり構造を持ったXMLデータを作成してしまうほうが多かったりします。

 このようなXMLデータの作成方法には,2通りあります。

 ひとつ目は,XMLファイルを読み込んだ時などに便利な,「文字列からの作成」方法です。手順は簡単,new演算子を使ってXMLクラスのインスタンスを生成する際に,引数としてXML表現を持った文字列(つまり,XMLとして妥当な文字列です)を指定するだけです。

var xml:XML = new XML("文字列");

 例えば,Flashムービーと同じディレクトリ内にあるxmlファイル「xmlData.xml」(図2)を読み込んで,変数xmlに格納するとします。

図2●読み込むXMLファイルの内容
図2●読み込むXMLファイルの内容

 この場合は,次のようにコードを記述します。実行結果は図3のようになります。

//「xmlData.xml」を読み込んで,変数xmlに格納
var xml:XML;
/*読み込み処理自体はテキスト・ファイルと同じく
URLLoader+URLRequestで作成*/
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("xmlData.xml");
loader.addEventListener(Event.COMPLETE,traceData);
function traceData(event:Event) {
  //読み込んだ内容を元に,XMLデータを作成
  xml = new XML(event.target.data);
  trace("あんぱんの価格は、" +
    xml.item.(name=="あんぱん").price + "円です。");
}
loader.load(request);

図3●実行結果。XMLの内容を出力する
図3●実行結果。XMLの内容を出力する

 XMLファイルといえども,テキスト・ファイルの一種ですので,前回学習したテキスト・ファイルを読み込む処理の時と同様に,URLLoaderクラスと,URLRequestクラスを組み合わせた処理を使えばOKです。

 ひとつ違う点は,読み込み完了後の処理で,読み込んだXMLファイルの内容を,そのままXMLクラスのコンストラクタ関数に,引数として渡している点です。

xml = new XML(event.target.data);

 URLLoaderで読み込んだテキストの内容は,dataプロパティに格納されていましたね。そこで,dataプロパティの内容を,そのまま引数として渡してしまえばOKというわけです。これで変数xmlには,読み込んだファイルの内容を元にしたXMLデータが作成されます。

 試しに,変数xmlに対して「item内で,nameの値が『あんぱん』の物のpriceの値を表示」という命令をしてみると,きちんと「80」と,ファイルに記述した内容が取得できていることが確認できますね(XMLデータ内の各要素へのアクセス方法は,後でご説明します)。

 また,今回はサンプルとして,XML形式のファイルを読み込みましたが,WebサービスなどのAPIを利用する際は,多くの場合,この方法と同じようにして,サーバー側がXML形式で返してくる情報を読み込み,XMLクラスのコンストラクタの引数に渡し,アクセスする,という手順を取ります。