/** * Parses 1-level or 2-level deep simple XML lists. * * @author Jeroen Wijering * @version 1.3 **/ class com.jeroenwijering.utils.ListParser { /** URL of the xml file to parse. **/ private var parseURL:String; /** The array the XML is parsed into **/ public var parseArray:Array; /** Flash XML object the file is loaded into. **/ private var parseXML:XML; /** Switch for numeric or associative 1-level array **/ private var isNumeric:Boolean = false; /** Constructor. **/ function ListParser() {}; /** * Parse an XML list. * * @param url URL of the playlist that should be parsed. **/ public function parse(url:String):Void { var ref = this; parseURL = url; parseArray = new Array(); parseXML = new XML(); parseXML.ignoreWhite = true; parseXML.onLoad = function(success:Boolean) { if(success) { ref.parseList(); } else { parseArray.push( {title:"Feed not found: "+ref.parseURL}); } parseArray.length == 0 ? parseArray.push({title:"Empty feed: "+ref.parseURL}): null; delete ref.parseXML; ref.onParseComplete(); }; if(_root._url.indexOf("file://") > -1) { parseXML.load(parseURL); } else if(parseURL.indexOf('?') > -1) { parseXML.load(parseURL+'&'+random(999)); } else { parseXML.load(parseURL+'?'+random(999)); } }; /** Covert general XML list to array. **/ private function parseList():Void { if(parseXML.firstChild.childNodes[0].nodeName == parseXML.firstChild.childNodes[1].nodeName) { isNumeric = true; } for(var i=0; i