Ну, давайте попробуем.
Писал на коленке, не тестил даже. Но суть должна быть понятна =)
Это только для затравки.

Код AS1/AS2:
////////////////////////////////////////////////////////////////////////////////
//
//
//
////////////////////////////////////////////////////////////////////////////////
/**
* @author Dimarik
* @version 1.0
* @playerversion Flash 6
* @langversion 1.0
*
* Wheather tracker
*/
//---------------------
// Constants
//---------------------
// Tags
var TAG_TOWN: String = 'TOWN';
var TAG_FORECAST: String = 'FORECAST';
var TAG_PHENOMENA: String = 'PHENOMENA';
var TAG_PRESSURE: String = 'PRESSURE';
var TAG_TEMPERATURE: String = 'TEMPERATURE';
var TAG_WIND: String = 'WIND';
var TAG_RELWET: String = 'RELWET';
var TAG_HEAT: String = 'HEAT';
// Attributes
var ATTR_TOWN_NAME: String = 'sname';
var ATTR_DAY: String = 'day';
var ATTR_MONTH: String = 'month';
var ATTR_YEAR: String = 'year';
var ATTR_HOUR: String = 'hour';
var ATTR_CLOUDINESS: String = 'cloudiness';
//---------------------
// Variables
//---------------------
var weatherData: Object = new Object();
var town: String = '';
var _iterator: Number;
// Создать на сцене клип с кадрами-иконками облачности
var cloudnessMC: MovieClip;
function parseXML(value:XMLNode):void {
var node: XMLNode;
var attr: Object;
while (node = doc.firstChild) {
attr = node.attributes;
switch ( node.nodeName.toUpperCase() ) {
case TAG_TOWN:
this.town = attr[ATTR_TOWN_NAME];
break;
case TAG_FORECAST:
var hour: Number = parseInt(attr[ATTR_HOUR]);
var day: Number = parseInt(attr[ATTR_DAY]);
var month: Number = parseInt(attr[ATTR_MONTH]);
var year: Number = parseInt(attr[ATTR_YEAR]);
var timeStamp: Date = new Date(year, month - 1, day, hour);
this._iterator = timeStamp.getTime();
this.weatherData[this._iterator] = new Object();
// TODO: tod, predict, weekday
break;
case TAG_PHENOMENA:
this.weatherData[this._iterator].PHENOMENA = new Object();
this.weatherData[this._iterator].PHENOMENA.cloudiness = attr[ATTR_CLOUDINESS];
// or
this.cloudnessMC.gotoAndStop( parseInt(attr[ATTR_CLOUDINESS]) || 'no_cloudiness_status');
break;
// TODO, TODO, TODO
}
this.parseXML(node);
node.removeNode();
}
}
function requestForecast():Void {
xmlin:XML = new XML();
xmlin.ignoreWhite = true;
var app:Object = this;
xmlin.onLoad = function(success:Boolean):Void {
if (success) {
var doc:XMLNode = this.firstChild.firstChild.firstChild;
app.parseXML(doc);
} else {
trace('Error: ');
}
};
xmlin.load("27612_1.xml");
}
this.requestForecast();