
最近忙しくてなかなか更新できないのですが、とりあえず、シンプルな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更新に対する修正です。

