Для вышеприведенного XML загрузка и парсинг:

Код AS1/AS2:
var configXmlPath:String = '';//URL конфигурационного XML
var xmlData:XML = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load(configXmlPath);
function loadXML (success:Boolean)
{
if (success)
{
var xmlNode:XMLNode = this.firstChild ; //для сокращения записи
var amountMenu:Number = xmlNode.childNodes.length ;
for (i = 0; i < amountMenu; i++)
{
var menuId:Number = parseInt(xmlNode.childNodes[i].attributes['id']);
var menuName:Number = xmlNode.childNodes[i].attributes['name'];
var amountSubmenu:Number = xmlNode.childNodes[i].childNodes.length ;
for (j = 0; j < amountSubmenu; j++)
{
var submenuId:Number = parseInt(xmlNode.childNodes[i].childNodes[j].attributes['id']);
var submenuName:Number = xmlNode.childNodes[i].childNodes[j].attributes['name'];
}
}
}
}
1. Получение атрибутов url уж сами по аналогии.
2. Что и когда делать с полученными данными - тоже на ваше усмотрение: можно в цикле загонять в многомерные массивы для последующего использования (правда это тоже избыточно, ведь экземпляр XML с полученными данными - это тоже своего рода массив, по ходу прямо его и использовать), а можно тут же и использовать даннные, в процессе парсинга.
3. parseInt для id - ну это чтобы как-то вычислять можно было, например, или для удобства создания и использования многомерного массива, чтобы по номерным индексам обращаться к элементам, причем эти индексы были бы равны id. Факультативно, можете убрать это приведение к числу.
4. Запись вида attributes['name'] - я так привык просто, строковое имя атрибута выделяется лучше в редакторе кода.