feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS3でXMLを読み込む

AS3でXMLを読み込む

最近忙しくてなかなか更新できないのですが、とりあえず、シンプルなXMLファイルを読み込んでアレコレしたいときのためのメモ。というわけで、以下、ソースと解説。

<?xml version="1.0" encoding="shift_JIS"?>
<data>
	<title>Unko</title>
	<img thumb="unko.jpg" src="unko.png"></img>
</data>

たとえばこんなXMLを読み込んでアレコレしたいというときは、こんなクラスを用意すると便利です。

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";
		private var xmlLoader:URLLoader;
		private var xml:XML;
		private var object:Object;
		public function XMLLoader(url:String, isUnicode:Boolean) {
			xmlLoader = new URLLoader();
			xmlLoader.dataFormat = URLLoaderDataFormat.TEXT;
			xmlLoader.addEventListener(Event.COMPLETE, onXMLLoaded);
			System.useCodePage = !isUnicode;
			xmlLoader.load(new URLRequest(url));
		}
		private function onXMLLoaded(e:Event):void {
			try {
				xml = new XML(xmlLoader.data);
				parseXML();
			} catch(err:TypeError) {
				trace(err.message);
			}
		}
		private function parseXML() {
			var obj = new Object();
			obj.title = xml.title;
			obj.img_thumb = xml.img.@thumb;
			obj.img = xml.img.@src;
			object = obj;
			dispatchEvent(new Event(LOAD_COMPLETE));
		}
		public function get rawXML():XML {
			return xml;
		}
		public function get data():Object {
			return object;
		}
	}
}

function parseXML()の中を変更すると、様々なXMLに対応できます。

で、Flashのフレームアクションで、こんな風に呼び出しましょう。
XMLLoaderの第二引数は、XMLファイルの文字エンコード形式がUnicodeならtrue、Shift_JISならfalseとして呼び出します。

var xmlLoader = new XMLLoader("myxml.xml", false);
xmlLoader.addEventListener(XMLLoader.LOAD_COMPLETE, onLoadCompleteHandler);
private function onLoadCompleteHandler(e:Event):void {
	var data = e.currentTarget.data;
	trace(data.title);
	trace(data.img_thumb);
	trace(data.img);
}

XMLのデータがトレースされます。

----

上のXMLLoaderを応用して作ったクラスで作ったAdobe AIR式Youtubeプレイヤー、「Simple Youtube Viewer」をバージョンアップしました。YoutubeAPI更新に対する修正です。

Tweet Share Bookmark

Navigation

prev: ActionScript 3.0 ビジュアルリファレンス買いました
next: AS3のInteractiveObject.mouseEnabledにご注意

Recently Entries