package { import flash.events.Event; public class XMLDistributor { private var xmlLoader:XMLLoader; public var _xmlDataArray:Object; public function XMLDistributor():void { xmlLoader = new XMLLoader(); } public function getXML(url:String):void { xmlLoader.loadXMLFromFile(url); xmlLoader.addEventListener("XML_READY", onDataReady, false, 0, true); } private function onDataReady(event:Event):void { _xmlDataArray = buildArray(xmlLoader.xmlData); } private function buildArray(xml:XML):Object { var xmlAssoc:Object = new Object(); for (var i:uint = 0; i < xml.children().length(); i++) { var xmlNode:XML = xml.children()[i]; xmlAssoc[xmlNode.child("name")] = recursion(xmlNode); } return xmlAssoc; } private function recursion(xml:XML):Object { var xmlAssoc:Object = new Object(); var tempObj:Object; for (var i:uint = 0; i < xml.children().length(); i++) { var xmlNode:XML = xml.children()[i]; if (xmlNode.hasComplexContent()) { //Recurssion tempObj = recursion(xmlNode); } else { // Text node tempObj = xmlNode.toString(); } var name:String = xmlNode.name().localName; var currentElement:Object = xmlAssoc[name]; if (! currentElement) // if there is nothing there yet { xmlAssoc[name] = tempObj; } else if (currentElement is Array) { currentElement.push(tempObj); } else { xmlAssoc[name] = new Array(currentElement, tempObj); } } return xmlAssoc; } } }