Все зависит от конкретной структуры документа XML.
В самом общем виде задача сводиться к обходу этого самого xml в цикле.
Например, если xml будет вида:
<menu>
<item id="1" label="item 1" url="somepage1.html" />
<item id="2" label="item 2" url="somepage2.html" />
<item id="3" label="item 3" url="somepage3.html" />
</menu>
То код должен быть примерно таким:

Код:
import mx.utils.Delegate;
var menuXML:XML;
var menuItems: Array = new Array();
menuXML = new XML();
menuXML.ignoreWhite = true;
menuXML.onLoad = Delegate.create(this, menuIsLoaded);
menuXML.load("menu.xml");
function menuIsLoaded():Void {
for(var i = 0; i < menuXML.firstChild.childNodes.length; i++){
var tempItem: MenuItem = new MenuTem();
tempItem._x = 10;
tempItem._y = 10+i*20;
tempItem.setLabel(menuXML.firstChild.childNodes[i].attributes.label);
tempItem.setAction(menuXML.firstChild.childNodes[i].attributes.url);
menuItems.push(tempItem);
}
}
Далее нужен символ MenuItem, его нужно создать во Flash IDE и происвоить его полю класс MenuItem. Добавить к нему динамическое текстовое поле и в панели своуйств в поле var написать tlabel, и затем собственно написать сам класс MenuItem

Код:
import mx.utils.Delegate;
class MenuItem extends MovieClip {
private var tlabel:String;
private var _action:String;
private function onLoad():Void{
this.onRollOver = Delegate.create(this, handleMouseOver);
this.onRollOut = Delegate.create(this, handleMouseOut);
this.onRelease= Delegate.create(this, handleMouseRelease);
}
public function MenuItem(){
}
public function setLabel(inlabel:String):Void{
tlabel = inlabel;
}
public function setAction(inaction:String):Void{
_action = inaction;
}
private function handleMouseOver():Void{
}
private function handleMouseOut():Void{
}
private function handleMouseRelease():Void{
getURL(_action);
}
}
Вроде так будет работать