Macromedia Flash非公式テクニカルノート XMLConnectorとデータバインディング
Platform: All 1. 米国の天気情報をXMLデータで受取る 注記: サーバー上では、原則として別ドメインからデータを取得することはできません(Macromedia TechNote「External data not accessible outside a Macromedia Flash movie's domain」参照。日本語版の少し古いTechNoteには、「別のドメイン上にあるデータソースからのLoad Variablesが動作しない 」があります。また、Flash Player 7の新しいセキュリティへの対応については、「Macromedia Flash Player 7におけるセキュリティの変更について」が詳しいです)。本稿でご紹介するテクニックを実際にサーバー上で使う場合には、XMLデータは同一ドメインから取得する必要があります。 ●サンプル: Databinding.fla(Zip圧縮/約152KB) EJSEは、weather xml web servicesという米国の天気情報をXMLデータで提供するサービスを行っています。その中のzipcodeから天気情報を返すGetWeatherInfoというサービスを利用します。 図001■EJSEのGetWeatherInfoサービス画面 まず、XMLデータ構造を確認するサンプルとして、1件のXMLデータをローカルに保存します。たとえば、サンフランシスコ(zipCodeは94103)の直近の天気情報を取得するには、ブラウザのアドレスに以下のURLを入力します。 http://www.ejse.com/WeatherService/Service.asmx/GetWeatherInfo?zipCode=94103 データが表示されたら、そのソースをXMLファイルとして保存します[*1](データの取得に失敗することもありますので、そのときは少し時間を空けて再度お試しください)。
2 コンポーネントインスタンスの配置 Labelコンポーネントのインスタンスをステージに3つ配置し、[プロパティインスペクタ]でそれぞれにresults1〜results3までのインスタンス名を設定します(図002)。 図002■ステージに配置されたLabelコンポーネント
つぎに、XMLConnectorコンポーネントのインスタンスを、ひとつステージに配置します。インスタンス名は、docとしました。XMLConnectorインスタンスは、XMLデータの読込みという目に見えない処理を行うためのものです。実際、SWFムービーにインスタンスは表示されません。サンプルでは見やすさを考えてステージ上に配置していますが、ステージ外に置いても構いません。 図003■XMLConnectorコンポーネントをステージに配置 3 XMLConnectorの設定とサンプルXMLの読込み 図004■[コンポーネントインスペクタ]と[プロパティインスペクタ]の[パラメータ]タブ これによりムービーは、サンフランシスコの最新の天気情報を得ることができます。 つぎに、読込んだXMLデータの必要項目をLabelインスタンスにデータバインディングする作業に移ります。しかし、その前に取得するXMLデータの構造を把握する必要があります。そのため、1で保存しておいたXMLファイルを、その解析のためのサンプルとして読込みます。 XMLConnectorインスタンスが選択された状態で、[コンポーネントインスペクタ]の[スキーマ]タブでプロパティresultsを選択したら、右上にある[サンプルXMLファイルからスキーマの読み込み]を行う下向き矢印[↓]のボタンをクリックします。 図005■[コンポーネントインスペクタ]の[スキーマ]タブでサンプルXMLを読込む [開く]ダイアログボックスで、予め保存しておいたXMLファイルを開きます。すると、読込んだXMLのデータ構造が、[スキーマ]タブに表示されます。 図006■[スキーマ]タブに読込まれたXMLデータ構造
4 データバインディング 図007■[バインディング]タブから[バインディングの追加]のダイアログを開く [バインディング]タブには、選択したエレメントが追加されます。パネル下側のバインディング属性ペインで、[direction]をoutに設定します。つぎに、[bound to]をクリックすると、値の欄に虫眼鏡アイコンが表示されるので、そのボタンをクリックします。 図008■[バインディング]タブでバインディング属性の設定 [バインド]ダイアログボックスの左側にコンポーネントインスタンスが表示されるので、値を表示したいLabelインスタンス名result1を選択します。ダイアログ右側の[スキーマの場所]に、textと表示されたら、[OK]ボタンをクリックします。 図009■[バインド]ダイアログボックスでコンポーネントインスタンスを選択 同様の手順でバインディングを追加し、XMLエレメントのTempratureをLabelインスタンスresult2にバインドします。 Labelインスタンスresult3には、XMLエレメントのWeatherInfoをバインドします。WeatherInfoはObjectエレメントです(図010)。その中に複数のエレメントをもっているため、このままではノードの内容がそっくりそのまま表示されてしまいます。そこで、エレメントをいくつか取出して、ひとつのテキストにまとめてみましょう。 図010■[バインディングの追加]でObectエレメントのWeatherInfoを選択 [バインディング]パネル下側のバインディング属性ペインで、[formatter]を[Compose String]に変更します。その下の[formatter options]をクリックしたら、値の右側に表示される虫眼鏡ボタンを押します。[ストリングの構成]ダイアログボックスが表示されますので、[ストリングテンプレート]のボックスに以下のように入力します(図011)。 Visibility is <Visibility>, UV Index is <UVIndex>. 図011■[ストリングの構成]にストリングテンプレートを入力 タグ<>の中には、WeatherInfoエレメントに含まれるエレメントの名前を記述します。タグは、XMLデータの中の該当するエレメントの値に置換えられます。それ以外の部分は、そのままテキストとして出力されます。つまり、Labelインスタンスのresult3には、この指定したかたちでテキストが表示されるのです。 5 XMLデータの読込みとその表示 // メインのタイムライン 'XMLConnector.trigger()'メソッドは、インスタンスの処理を実行し、XMLデータを読込みます。 [ムービープレビュー]を実行して、結果を確認してみましょう。最新のサンフランシスコの天気情報が表示されます(エラーが発生したら、少し時間をおいて再度お試しください)。 図012■XMLConnectorがXMLデータを読込んでLabelインスタンスに表示 _____ 作成者: 野中文雄 Copyright © 2001-2003 Fumio Nonaka. All rights reserved. |
||||||