Ну дык ХМЛ - это уже готовый объект с уже написаными, описанными и хорошо работающими свойствами/методами. Зачем его еще во что-то переделывать? А самое главное, что если вы дождались онЛоада, то это значит, что ХМЛ уже 1 раз парсился (получаете-то вы строку, а не ХМЛ)!
Вот, немного переделал код выше, я думаю, что это то, что мешало (длинные имена) а не плохая структура.

Код:
XMLNode.prototype.__resolve = function(p):Object {
if(!isNaN(p/1)){
return this.childNodes[p];
} else {
return this.attributes[p];
}
}
var myXML:XML = new XML("<node a='0'><sub1 a='1'/><sub1 a='2'/><sub1 a='3'/><sub2 a='4'/><sub2 a='5'/></sub1><sub1 a='6'/></node>");
trace(myXML.childNodes[0].a);
trace(myXML.childNodes[0].childNodes[0].a);
trace(myXML[0][0].a);