Kennst Du die PHP-Funktion xml_parse_into_struct ?
In der zurückgegebenen Struktur steht die Tiefe des XML-Tags direkt im Array-Index 'level', d.h. man braucht keine Rekursion zum Durchlaufen der Einträge, die Tiefe wird also nicht durch Verschachtelung repräsentiert. Damit würde sich auch Deine Stuktur vereinfachen lassen, etwa
array(
array(
'level' => 0, // Ebene (Verschacheltungstiefe)
'pos' => 0, // Position (Reihenfolge)
'type' => 'folder' (Art des Elements)
'name' => 'test', (Name, bzw. ID)
// weitere Informationen
),
);