以往要載入一個外部的XML檔案的話,我們可以簡化成下列的作法:
Loading XML
var externalXML:XML = new XML(); externalXML.onLoad = function(success) { trace(externalXML); }; externalXML.load("myxml.xml");
從載入方式到Callback Event的處理,完全交由「XML」類別來孤軍奮戰~
然而ActionScript 3.0,它終於多了幾位幫手來協助它了~ 不僅減輕它的負擔,也能夠各司其職~
Loading XML for AS 3.0
var externalXML:XML; var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest("myxml.xml"); loader.load(request); loader.addEventListener(Event.COMPLETE, onComplete); loader.addEventListener(ProgressEvent.PROGRESS, onProgress); function onComplete(event:Event):void { externalXML = new XML(event.target.data); trace(externalXML.toXMLString()); } function onProgress(event:ProgressEvent):void { trace(event.bytesLoaded); trace(event.bytesTotal); }
我們可以發現載入方式完全交由「URLLoader」去處理,Callback Event也委託「IEventDispatcher」來負責,最重要的是~ 這樣的作法才符合 High Cohesion and Low Coupling,大大地增強其彈性~
而且ActionScript 3.0是以ECMAScript for XML (E4X) specification (ECMA-357 edition 2)為基礎來處理XML資料,不僅更容易使用也更簡化操作~ 順便看一下例子:
var myXML:XML = <order> <item id='1'> <menuName>burger</menuName> <price>3.95</price> </item> <item id='2'> <menuName>fries</menuName> <price>1.45</price> </item> </order> trace(myXML.item[0].menuName); // Output: burger trace(myXML.item.(@id==2).menuName); // Output: fries trace(myXML.item.(menuName=="burger").price); // Output: 3.95
果然夠簡化與方便!!!