как вариант запихать этот хмл в компонент Tree, по ходу слегка подправив ( нюансы за бортом, но схема рабочая)
зы: можно не править ХМЛ в AS, а заставит пхп генерить сразу валидный вариант

Код:
//myTree - компонент Tree на сцене
XML.prototype.ignoreWhite=true;
var dataXML:XML=new XML('<?xml version="1.0" encoding="utf-8"?> <portfolio> <category name="Banners"> <dir01> <file>full.gif</file> <file>info.txt</file> <file>prev.gif</file> </dir01> <dir02> <file>full.gif</file> <file>info.txt</file> <file>prev.gif</file> </dir02> <dir03> <file>full.gif</file> <file>info.txt</file> <file>prev.gif</file> </dir03> </category> <category name="Websites"> <dir01> <file>full.gif</file> <file>info.txt</file> <file>prev.gif</file> </dir01> <dir02> <file>full.gif</file> <file>info.txt</file> <file>prev.gif</file> </dir02> <dir03> <file>full.gif</file> <file>info.txt</file> <file>prev.gif</file> </dir03> </category> </portfolio>');
myTree.labelField="name";
var dataXML:XMLNode=dataXML.firstChild;
setNames(dataXML);
function setNames(node:XMLNode){
if(node.nodeName=="file"){
var textNode:XMLNode=node.firstChild;
node.attributes.name=textNode.nodeValue;
textNode.removeNode();
}else{
if(!node.attributes.name) node.attributes.name= node.nodeName;
var nodes=node.childNodes;
for(var i in nodes){
setNames(nodes[i]);
}
}
}
myTree.dataProvider=dataXML;