# Batch loading several XML files

**URL:** <https://forum.kirupa.com/t/batch-loading-several-xml-files/321913>\
**Category:** open source\
**Created:** [May 4, 2011, 5:54pm UTC](https://forum.kirupa.com/t/batch-loading-several-xml-files/321913 "2011-05-04T17:54:53Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![JohnatanNVMD](https://avatars.discourse-cdn.com/v4/letter/j/848f3c/32.png) [@JohnatanNVMD](https://forum.kirupa.com/u/JohnatanNVMD)\
**Post date:** [May 4, 2011, 5:54pm UTC](https://forum.kirupa.com/t/batch-loading-several-xml-files/321913/1 "2011-05-04T17:54:53Z")

</div>

I had a problem to load several XML files and wait while it complete loads. This class help me to solve this problem.

```auto

package
{
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    import flash.events.ProgressEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    
    [Event(name="complete", type="flash.events.Event")]
    [Event(name="progress", type="flash.events.ProgressEvent")]
    
    public class BatchLoader extends EventDispatcher
    {
        private var _files:Array = new Array;
        private var _loaders:Array = new Array;
        private var _done:Number = 0;
        private var _total:Number = 0;
        
        public function BatchLoader(target:IEventDispatcher=null)
        {
            super(target);
        }
        
        public function load():void
        {
            this._total= this._loaders.length;
            
            for (var index:int = 0; index < this._total; index++) {
                this._loaders[index].load(new URLRequest(this._files[index]));
            }
        }
        
        public function addFile(url:String, callback:Object, context:Object):void
        {
            this._files.push(url);
            
            var urlLoader:URLLoader = new URLLoader();
            urlLoader.addEventListener(Event.COMPLETE, function(e:Event):void {
                callback(new XML(e.target.data), context);
                _done++;
                if (_done == _total) {
                    dispatchEvent(new Event(Event.COMPLETE));
                }
            });
            this._loaders.push(urlLoader);
        }
    }
}

```

usage:

```auto

var _batchLoader:BatchLoader = new BatchLoader;
    this._batchLoader.addEventListener(Event.COMPLETE, _xmlLoadingComplete);
    this._batchLoader.addFile(value.catalogUrl, function(data:XML, _this:Object):void {
        _this._setCatalog(data);
    }, this);
    this._batchLoader.addFile(value.additionalItemsUrl, function(data:XML, _this:Object):void {
        _this._setAdditional(data);
    }, this);
    this._batchLoader.load();

```
