Wednesday, March 30, 2011

Load (multiple) XML file using URLLoader and extract data



//XMLURLLoader.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="LoadXML()">
    <mx:Script>
        <![CDATA[
    import mx.collections.ArrayCollection;

    private var NameXML:XML=new XML();
    [Bindable]      
    public var FManager_Names:ArrayCollection=new ArrayCollection();
    [Bindable]
    private var FManager_Id:ArrayCollection=new ArrayCollection();
    [Bindable]      
    public var Manager_Names:ArrayCollection=new ArrayCollection();
    [Bindable]
    private var Manager_Id:ArrayCollection=new ArrayCollection();
      
             private function LoadXML():void
            {
                var LoaderObj:URLLoader=new URLLoader();
                LoaderObj=new URLLoader();
                LoaderObj.load(new URLRequest("FManagerName.xml"));
                LoaderObj.addEventListener(Event.COMPLETE,                                                function(e:Event){ParseXML(e,FManager_Names,FManager_Id);});

                LoaderObj=new URLLoader();
                LoaderObj.load(new URLRequest("ManagerName.xml"));
                LoaderObj.addEventListener(Event.COMPLETE,                                                                         function(e:Event){ParseXML(e,Manager_Names,Manager_Id);});
              
             }
  
    private function ParseXML(e:Event,Type:ArrayCollection,Id:ArrayCollection)
            {
                 NameXML=XML(e.currentTarget.data);
                 var currentNode:XML;
                  for( var i:int = 0; i < NameXML.children().length(); i++)
                    {
                    currentNode=NameXML.children()[i];
                    Id.addItem(currentNode.attributes()[0]);
                    Type.addItem(currentNode.attributes()[1]);
                    }
          
             }
        ]]>
    </mx:Script>
    <mx:Label  text="Functional Manager Names:"/>
    <mx:ComboBox id="FManager" dataProvider="{FManager_Names}" />
    <mx:Label  text="Functional Manager ID:"/>
    <mx:ComboBox id="FManagerID" dataProvider="{FManager_Id}"  />
    <mx:Label  text="Manager Names:"/>
    <mx:ComboBox id="Manager" dataProvider="{Manager_Names}" />
    <mx:Label  text="Manager ID:"/>
    <mx:ComboBox id="ManagerID" dataProvider="{Manager_Id}"/>
</mx:WindowedApplication>

//required XML files
//FManagerName.xml
<?xml version="1.0" encoding="utf-8"?>
<FManagerNames>
<FManager FMan_id="1" FMan_Name="Dheeraj"/>
<FManager FMan_id="2" FMan_Name="Karthick"/>
<FManager FMan_id="3" FMan_Name="Dinesh"/>
</FManagerNames>

//ManagerName.xml
<?xml version="1.0" encoding="utf-8"?>
<ManagerNames>
<Manager Man_id="1" Man_Name="P.Ananth"/>
<Manager Man_id="2" Man_Name="Gokulakrishnan"/>
<Manager Man_id="3" Man_Name="Stani"/>
</ManagerNames>

 LoadXML( )-   You can use the load( ) method of the URLLoader and URLRequest classes to load data of an XML file, text file...When the load event is completed,you can wrap your function call with arguements (to parse mulitple xml files) to a function  .The function also takes the complete load event as its parameter to get the data from it.

ParseXML( )- You can store the data in an XML structure and you can parse it using the children() and attributes() method of XML class.
Do not keep the same name for your xml file and the root tag in it.