XMLの読込

ActionScript3.0 — Tags: , — chimanaco @ 3:41 PM このエントリをはてなブックマークに追加

AS3.0でのXMLの読込をやってみます。AS2.0ではfirstChild.firstChild.childNodes
みたいに記述してもう厭んなりCASA Frameworkを使ったりしていましたが大分解り易くなりました。

参考にさせて頂いたページ

まず外部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を読込み、読込んだXMLデータをXMLオブジェクトに変換します。読込みが終わって、XMLオブジェクトに変換されたら、LOAD_COMPLETEのカスタムイベントを配信します。このようにカスタムイベントを設定しておくと他のクラスに処理を引き継ぐことができます。最後にXMLオブジェクトを他のクラスから利用出来るようにpublic属性のgetXML()メソッドを定義しておきます。

続いて上記XMLloaderクラスを使ってxmlファイルを読込んでパースするNewsXMLEventクラスを作ります。ニュースの情報を持つwhatsNew.xmlファイルを読込んでその内容を出力します。

package {
	import flash.events.Event;
	import XMLloader;

	public class NewsXMLEvent
	{
		public var xmlLoader:XMLloader;
		public var whatsXml:XML;

		//コンストラクタ
		public function NewsXMLEvent(url:String, isUnicode:Boolean)
		{
			xmlLoader = new XMLloader(url, isUnicode);
			xmlLoader.addEventListener(XMLloader.LOAD_COMPLETE, onXMLloaded);
		}

		//XML読込完了
		private function onXMLloaded(event:Event):void
		{
			//XML取得
			whatsXml = xmlLoader.getXML();
			traceNewList();
		}

		private function traceNewList():void
		{
			for each(item in whatsXml.news)
			{
			var item:XML;
			//textを出力
			trace(item.date + "のニュースは" + item.text);
			}
		}
	}
}

読込むwhatsNew.xml。日付と内容の情報を持っています。

<?xml version="1.0" encoding="UTF-8"?>
<data>
	<news>
		<date>11/20</date>
		<text>ニュース1</text>
	</news>
	<news>
		<date>11/19</date>
		<text>ニュース2</text>
	</news>
	<news>
		<date>11/18</date>
		<text>ニュース3</text>
	</news>
</data>

メインのドキュメントクラスでは引数に読込むxmlのパスを指定します。

package {
	import flash.display.Sprite;
	import flash.events.Event;

	import NewsXMLEvent;

	public class Main extends Sprite
	{
		//コンストラクタ
		public function Main():void
		{
			var url:String = "whatsNew.xml";
			var isUnicode:Boolean = false;
			var _news:NewsXMLEvent = new NewsXMLEvent(url , isUnicode);
		}
	}
}

結果、こんなのが出力されます。

11/20のニュースはニュース1
11/19のニュースはニュース2
11/18のニュースはニュース3

0 Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Comments links could be nofollow free.

This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2010 chimanaco blog | powered by WordPress with Barecity