А чего хотите вы? У вас проблемы с логикой в коде, флеш не причём.

Код AS3:
var xml:XML = new XML(<TEST />);
xml.appendChild(<lvl1 />);
xml.lvl1.appendChild(<lvl2 />);
xml.lvl1.appendChild(<lvl2 />);
xml.appendChild(<lvl1 a="1" />);
//xml.lvl1.appendChild(<lvl2 />); //какой это будет элемент lvl1 из двух?
xml.appendChild(<lvl1 a="2" />);
//xml.lvl1.appendChild(<lvl2 />); //а это - какой lvl1 из трёх?
trace(xml);
Можно вручную указывать, какой именно

Код AS3:
var xml:XML = new XML(<TEST />);
xml.appendChild(<lvl1 />);
xml.lvl1.appendChild(<lvl2 />);
xml.lvl1.appendChild(<lvl2 />);
xml.appendChild(<lvl1 a="1" />);
xml.lvl1[1].appendChild(<lvl2 />); //какой это будет элемент lvl1 из двух?
xml.appendChild(<lvl1 a="2" />);
xml.lvl1[2].appendChild(<lvl2 />); //а это - какой lvl1 из трёх?
trace(xml);
Про итерацию в коллекции вы что-то не так поняли.
Также можно обращаться по атрибуту a, но для этого все элементы должны содержать этот атрибут:

Код AS3:
var xml:XML = new XML(<TEST />);
xml.appendChild(<lvl1 a="0" />);
xml.lvl1.appendChild(<lvl2 />);
xml.lvl1.appendChild(<lvl2 />);
xml.appendChild(<lvl1 a="1" />);
xml.lvl1.(@a == 1).appendChild(<lvl2 />);
xml.appendChild(<lvl1 a="2" />);
xml.lvl1.(@a == 2).appendChild(<lvl2 />);
trace(xml);