« AS3.0入門ノート販売開始です。 | メイン | アップルストア銀座でAS3セミナー »

11.1 XMLファイルを読み込む

■外部XMLファイルの読み込み
外部のXMLファイルを利用するには、まず最初にXMLファイルを読み込み、読み込み完了後にXMLデータの解析を行います。XMLファイルは実際にはテキストファイルなので、通常のテキストファイルと同様にURLLoaderクラスを使って読み込みます(URLLoaderクラス→p.??)。
なお、外部テキストファイルの読み込みで説明したように、SWFとXMLファイルが同じドメインにない場合はセキュリティエラーになります。これを解決するにはクロスドメインポリシーファイルを相手側サーバーに置き、アクセスが許可されているかどうかをチェックする必要があります。(ポリシーファイルのチェック→p.??)
用意するXMLファイルにはXML宣言やエンコード情報なども実際には必要ありません。ファイル拡張子も.xmlではなく.txtでも構いません。テキストエンコードの初期値はUnicodeですが、ShiftJISにも対応できます。

[:sample:] photolist.xml 例:読み込むXMLファイル
<?xml version="1.0" encoding="Shift_JIS" ?>
<data>
<photo tag="sea" fname="R0010834.jpg" >雪の漁港</photo>
<photo tag="sea" fname="R0011823.jpg" >サザンビーチモニュメント</photo>
<photo tag="sea" fname="R0010760.jpg" >冬晴れの海</photo>
<photo tag="cat" fname="R0016100.jpg" >漁港の猫</photo>
</data>

■外部XMLファイルを読み込むクラス
次のXMLloaderクラスは、XMLファイルを読み込み、読み込んだXMLデータをXMLオブジェクトに変換するクラスです。XMLファイルを読み込み、それをXMLオブジェクトに変換するところまでが完了したならば、XMLloader.LOAD_COMPLETEのカスタムイベントを配信します。

[:sample:] XMLloader.as
例:外部XMLファイルを読み込むXMLloaderクラス
package {
	import flash.events.EventDispatcher;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.system.System;
	import flash.events.Event;

	public class XMLloader extends EventDispatcher  {
		public static const LOAD_COMPLETE:String = "load_complete";
		var xmlLoader:URLLoader;
		var my_xml:XML;
		
		//コンストラクタ
		function XMLloader(url:String, isUnicode:Boolean) {
			//URLLoader作成
			xmlLoader = new URLLoader();
			xmlLoader.dataFormat = URLLoaderDataFormat.TEXT;
			xmlLoader.addEventListener(Event.COMPLETE, onXMLloaded);
			//URL
			var urlReq:URLRequest = new URLRequest(url);
			//Unicode以外ならばtrue
			System.useCodePage = ! isUnicode;
			//読み込み開始
			xmlLoader.load(urlReq);
		}
		//読み込み完了
		function onXMLloaded(event:Event):void {
			try {
				//XMLオブジェクトに変換する
				my_xml = new XML(xmlLoader.data);
				//カスタムイベントを配信する
				dispatchEvent(new Event(LOAD_COMPLETE));
			} catch (err:TypeError) {
				trace(err.message);
			}
		}
		//XMLオブジェクトを返す(他のクラスからのアクセスに対応)
		public function getXML():XML{
			return my_xml;
		}
	}
}

すでに書いたようにXMLファイルの読み込みはテキストファイルの読み込みと同じなので、URLLoaderクラスのオブジェクトxmlLoaderを作り、URLRequestクラスで指定するURLをロードします。読み込みが完了したならばイベントが通知されるようにxmlLoaderオブジェクトにEvent.COMPLETEのイベントリスナーに登録し、onXMLloaded()が呼び出されるようにします。
XMLファイルを読み込み終わった段階では、そのデータはまだ単なるテキストデータに過ぎません。そこでテキストデータからXMLオブジェクトを作成します。そして、XMLオブジェクトができたところでカスタムイベントを配信します。 (カスタムイベント→p.??)

例:テキストデータからXMLオブジェクトを作り、カスタムイベントを配信する
//XMLオブジェクトに変換する
my_xml = new XML(xmlLoader.data);
//カスタムイベントを配信する
dispatchEvent(new Event(LOAD_COMPLETE));

このXMLloaderクラスは、外部XMLファイルを読み込んでXMLオブジェクトを作るまでがその機能です。できあがったXMLオブジェクトを元に何かの処理を行う機能はありません。XMLオブジェクトの利用は他のクラスに任せます。XMLオブジェクトの作成完了を告げるカスタムイベントの配信は、他のクラスに処理を引き継ぐための機能です。
そして、XMLオブジェクトを利用したいクラスから求められたときにXMLオブジェクトを引き渡せるように、public属性のgetXML()メソッドを定義しておきます。

[:note:] getterを利用することで他からはプロパティ参照のように見せることができます。(getの利用→p.??)
//XMLオブジェクトを返す(他のクラスからのアクセスに対応)
public function getXML():XML{
	return my_xml;
}

About

2007年8月24日 13:48に投稿されたエントリーのページです。

ひとつ前の投稿は「AS3.0入門ノート販売開始です。」です。

次の投稿は「アップルストア銀座でAS3セミナー」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。