No sé si entendí tu pregunta. Yo de flash cero, pero te paso un ejemplo sencillo que hice que te pasa la estructura árbol de un xml a listas html del tipo <ul><li></li></ul> por si lo puedes reutilizar para lo que quieres y es independiente de la profundidad de las etiquetas de tu xml y del largo.
arbol.xml Código PHP:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="arbol.xsl"?>
<menu>
<arbol>
<nodo nombre="Nodo1."/>
<nodo nombre="Nodo2.">
<nodo nombre="Nodo2.1.">
<nodo nombre="Nodo2.1.1."/>
<nodo nombre="Nodo2.1.2."/>
</nodo>
<nodo nombre="Nodo2.2.">
<nodo nombre="Nodo2.2.1."/>
<nodo nombre="Nodo2.2.3.">
<nodo nombre="Nodo2.2.3.1."/>
</nodo>
</nodo>
</nodo>
<nodo nombre="Nodo3">
<nodo nombre="Nodo3.1.">
<nodo nombre="Nodo3.1.1."/>
<nodo nombre="Nodo3.1.2."/>
</nodo>
<nodo nombre="Nodo3.2.">
<nodo nombre="Nodo3.2.1."/>
<nodo nombre="Nodo3.2.3.">
<nodo nombre="Nodo3.2.3.1.">
<nodo nombre="Nodo3.2.3.1."/>
<nodo nombre="Nodo3.2.3.2."/>
<nodo nombre="Nodo3.2.3.3."/>
</nodo>
</nodo>
</nodo>
</nodo>
<nodo nombre="Nodo4"/>
<nodo nombre="Nodo5"/>
<nodo nombre="Nodo6"/>
<nodo nombre="Nodo7"/>
</arbol>
</menu>
arbol.xsl Código PHP:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="menu">
<!-- Creamos las etiquetas <ul> de una lista HTML -->
<ul>
<xsl:apply-templates select="arbol"/>
</ul>
</xsl:template>
<xsl:template match="arbol">
<xsl:apply-templates select="nodo"/>
</xsl:template>
<xsl:template match="nodo">
<!-- Creamos las etiquetas <li> de un item de una lista HTML -->
<li>
<!-- IMPRIMIMOS EL NOMBRE DEL NODO -->
<xsl:call-template name="printnodo">
<xsl:with-param name="nombre">
<xsl:value-of select="@nombre"/>
</xsl:with-param>
</xsl:call-template>
<!-- COMPROBAMOS SI TIENE HIJOS EL NODO-->
<xsl:call-template name="checkchild"/>
</li>
</xsl:template>
<xsl:template name="printnodo">
<xsl:param name="nombre"/>
<xsl:value-of select="$nombre"/>
</xsl:template>
<xsl:template name="checkchild">
<xsl:choose>
<xsl:when test="count(child::nodo)>0">
<xsl:for-each select="nodo">
<!-- si no queremos ordenarlo por nombre del nodo, comentamos esta línea sort -->
<xsl:sort select="@nombre"/>
<xsl:call-template name="loadchild"/>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="loadchild">
<!-- recorremos los hijos de un nodo -->
<ul>
<xsl:apply-templates select="."/>
</ul>
</xsl:template>
</xsl:stylesheet>
El archivo arbol.xml es el tu XML propiamente dicho y el archivo arbol.xsl es el que lo recorrerá y lo transformará a HTML.
Suerte