トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

XMLファイルから情報を読み取る_Flash

XMLファイルから情報を読み取る

Flashでは、XMLファイルを外部に用意してそこから情報を取ってくることができます。XMLファイルを利用する利点は、データを階層的に管理できる、データがタグ付けされているので分かりやすい、といったところでしょうか。

XMLファイルの読み込みと、XML形式のテキスト作成・および送信もできるみたいです(ファイルに書き出しは無理っぽい)。ですので、XML形式で情報をやりとりできるシステムと連携をとりやすそうですね。たとえば、最近のWeb検索システムを絡めたAPI(GoogleAPI/YahooAPIとか)で、データのやりとりをXMLで行うものも出てきてますので(というか、最近のWebシステムの主流はXMLでデータ送受信かな)、これらをFlashから操作する、ということもできるかもしれません。

サンプルのXMLファイルを用意する + XMLの基礎

それでは、手始めにファイルからXMLファイルを読み込んで、ノード情報をたどってみることにしましょう。

<?xml version="1.0" encoding="UTF-8" ?>
<zaiko>
  <zaiko-data num="1">
    <name>みかん</name>
    <unit>0</unit>
    <data>
       <date>2003/04/01</date>
       <date2>2003/04/02</date2>
    </data>
  </zaiko-data>
  <zaiko-data num="2">
    <name>りんご</name>
    <unit>1</unit>
    <data>
      <date>2003/03/12</date>
      <date2>2003/04/03</date2>
    </data>
  </zaiko-data>
</zaiko>

Flashのヘルプを見ると、XMLファイルをDOMのように扱うことができる、とあります。DOMとは、XMLファイルの内容をツリー構造で持つ形式です。はじめに解析処理が入ってツリー構造を構築しますので初期処理時間がかかる、XMLデータが大きい場合は時間+メモリ消費が発生、というデメリットがあります。メリットとしては、好きなノードを自由にランダムアクセスできる、読み込んだ後は処理が速い、といったところでしょうか。

これと別のXML方式ではSAXというのがあります。Flashでは関係ないですが、大量のデータを扱う場合にはSAXのほうがメモリ消費量が少なく、おそらく高速に扱えます。XMLファイルを解析しつつコールバック関数でノード情報を上から逐次流していく、という手法となります。必要な情報だけ捕まえるといい構造ですのでシンプルです。デメリットとしては、上からずばっと流されるためツリー構造は持ちません。すべて自前でしないといけないため、DOMよりもプログラミングスキルがいります。

さて、例に挙げたXMLに戻ります。これを「test.xml」としてUTF-8で保存します。Flashでは、外部のテキストファイル・XMLファイル類はUTF-8で扱うようにしてください。それ以外(SHIFT-JISなど)は扱うことができません。

「<zaiko>」の記述はノード(node)と呼ばれ、XMLファイルの一番先頭の要素はルートノード(root node)と呼ばれます。HTMLではタグの表現ですが、XMLでは要素(Element)といったりもします。この要素に囲まれた部分にて文字列要素を指定することで、それがその要素の値となります。

<name>みかん</name>

と書くと、name要素の値は「みかん」となります。要素は<xxxx>で開始したら必ず</xxxx>のようにスラッシュ付きの要素で閉じ指定する必要があります。閉じ忘れがあるとエラーとなります。ちなみに、「ノード」とは「<name>」「みかん」「</name>」この3つ全てが個々のノードです。「要素」はそのノードの1つの種類をあらわす、といってもいいかもしれません。

<zaiko-data num="1">

のように、要素の中に値を入れている部分があります。numの値は1という意味ですが、これは属性(attribute)と呼ばれる情報です。より要素に近いパラメータ、と言えるでしょうか。

また、仮に

<zaiko num="3"></zaiko>

といった属性のみを持つ要素があるとすると、この場合は文字列を持ちません。この場合は、以下のように記述することもできます。

<zaiko num="3" />

Flashに限らず、XMLは基本的にこの要素と属性の組み合わせがツリー構造になっているデータ型です。厳密にはスキーマでデータの型を決めたりもできるのですが、Flashでは上記レベルの知識でとりあえずOKです。

FlashのASにてXMLファイルを読み込む

Flashにて外部のXMLファイルを読み込むにはどうすればいいでしょうか?FlashではXML操作を行うクラス「XML」にていじることができます。XMLファイルの読み込みはXMLクラスの「load」関数にて行いますが、読み取り(解析)完了の通知は、XMLクラスにonLoadにて登録した関数にて行われます。

// XMLコントロールクラスの作成と読み込みコールバック関数の割り当て
xmlCtrl = new XML();
xmlCtrl.onLoad = xmlProc;

// 空白のみを含むテキストノードを破棄する
XML.prototype.ignoreWhite = true;

// XMLファイルの読み込み時に呼ばれるコールバック関数
function xmlProc(success) {
  if(!success) return;   // 読み込みに失敗した場合

  // 読み込みに成功
  // ... 何か処理
}

上記の場合、XMLクラスとして「xmlCtrl」というのを作成し、onLoadにてコールバック関数名を指定します。ここでは「xmlProc」としています。「XML.prototype.ignoreWhite」は、XMLファイルより取得できた文字列が空白の場合にその文字列自身を解析対象からはずします。

「function xmlProc(success) { .. }」に記述にて、XMLファイルの読み込み・解析が完了したあとの処理を行います。引数のsuccessがfalseの場合はXMLファイルの読み込みに失敗した、ということになります。

これで、XMLファイルの読み込みについてはOKです。次にXMLファイルのツリー構造をたどっていき、情報をゲットしていきます。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.