Pages

Friday, February 11, 2011

AS3: How to load XML in swf at run-time

We can load xml file into swf at run-time by using following class.

SOURCE CODE
 package   
 {  
  import flash.display.Sprite;  
  import flash.events.*;  
  import flash.net.*;  
  /**  
  * @file CLoader.as  
  * @author Abhishek Kumar  
  */  
  public class CLoader extends Sprite   
  {  
   private var oDispatcher:CDispatcher;  
   public function CLoader()  
   {  
    oDispatcher = CDispatcher.getInstance();  
   }  
   public function retrieve(iXml:String):void  
   {  
    var loader:URLLoader = new URLLoader();  
    configureListeners(loader);  
    var request:URLRequest = new URLRequest(iXml);  
    try   
    {  
     loader.load(request);  
    }   
    catch (error:Error)   
    {  
     trace("Loading failed!");  
    }  
   }  
   private function configureListeners(dispatcher:IEventDispatcher):void   
   {  
    dispatcher.addEventListener(Event.COMPLETE, completeHandler);  
    dispatcher.addEventListener(Event.OPEN, openHandler);  
    dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);  
    dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);  
    dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);  
    dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);  
   }  
   private function completeHandler(event:Event):void   
   {  
    trace("CLoader -> completeHandler: " + event);  
    var loader:URLLoader = URLLoader(event.target);  
    var Xml:XML = new XML(loader.data);  
    oDispatcher.dispatch(CDispatcher.ACTION, Xml);  
   }  
   private function openHandler(event:Event):void   
   {  
    trace("CLoader -> openHandler: " + event);  
   }  
   private function progressHandler(event:ProgressEvent):void   
   {  
    trace("CLoader -> progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);  
   }  
   private function securityErrorHandler(event:SecurityErrorEvent):void   
   {  
    trace("CLoader -> securityErrorHandler: " + event);  
   }  
   private function httpStatusHandler(event:HTTPStatusEvent):void   
   {  
    trace("CLoader -> httpStatusHandler: " + event);  
   }  
   private function ioErrorHandler(event:IOErrorEvent):void   
   {  
    trace("CLoader -> ioErrorHandler: " + event);  
   }  
  }  
 }  

USAGE
import CLoader;
var oLoader:CLoader = new CLoader();
oLoader.retrieve ('Database.xml');

XML (sample)
<?xml version="1.0" encoding="utf-8" ?>
<data>
  <item index="1" image_path="img_1.jpg" thumbnail_path="thumb_1.jpg" /> 
  <item index="2" image_path="img_2.jpg" thumbnail_path="thumb_2.jpg" />
  <item index="3" image_path="img_3.jpg" thumbnail_path="thumb_3.jpg" /> 
  <item index="4" image_path="img_4.jpg" thumbnail_path="thumb_4.jpg" /> 
  <item index="5" image_path="img_5.jpg" thumbnail_path="thumb_5.jpg" /> 
  <item index="6" image_path="img_6.jpg" thumbnail_path="thumb_6.jpg" /> 
  <item index="7" image_path="img_7.jpg" thumbnail_path="thumb_7.jpg" /> 
  <item index="8" image_path="img_8.jpg" thumbnail_path="thumb_8.jpg" /> 
  <item index="9" image_path="img_9.jpg" thumbnail_path="thumb_9.jpg" />
</data>

No comments:

Post a Comment