все переменные определим заранее, для чистоты эксперимента.

Код:
var xml:XML = <xml><x /><x /><x /></xml>;
var t:Number;
var i:uint;
var j:uint;
var l:uint;
var test:XML;
var list:XMLList;
t = getTimer();
for ( i=0; i<1E5; i++ ) {
l = xml.elements("*").length();
for ( j=0; j<l; j++ ) {
test = XML( xml.elements("*")[j] );
}
}
trace( "elements + XML = ", getTimer() - t );
t = getTimer();
for ( i=0; i<1E5; i++ ) {
// заменим elements("*") просто на *.
// теже яйца, только вид сбоку
l = xml.*.length();
for ( j=0; j<l; j++ ) {
test = XML( xml.*[j] );
}
}
trace( "* + XML = ", getTimer() - t );
t = getTimer();
for ( i=0; i<1E5; i++ ) {
l = xml.*.length();
for ( j=0; j<l; j++ ) {
// уберём XML. зачем из XML создавать новый XML не понятно
// если бы ла нужна конвертация, то надо было использовать оператор as.
// но тут она незачем, так как это E4X
test = xml.*[j];
}
}
trace( "* = ", getTimer() - t );
t = getTimer();
for ( i=0; i<1E5; i++ ) {
// вынесем наш спиок зарание в начало
list = xml.*;
l = list.length();
for ( j=0; j<l; j++ ) {
test = list[j];
}
}
trace( "* + list = ", getTimer() - t );
t = getTimer();
for ( i=0; i<1E5; i++ ) {
// поиграемся в for each
for each ( test in xml.* ) {
// собственно тут всё ...
}
}
trace( "for each = ", getTimer() - t );
t = getTimer();
for ( i=0; i<1E5; i++ ) {
list = xml.*;
for each ( test in list ) {
// собственно тут всё ...
}
}
trace( "for each + list = ", getTimer() - t );
получили, что 3 самый быстрых варианта, практических равных по скорости:
* + list
for each
for each
разница в пару миллисекунд на тысяче итераций, можно опустить.
итог: тоесть, да, Вы не умеете работать с XML.