XSLT - Transformación difícil

Estoy teniendo problemas con una transformación XSLT de fragmentos XML. La fuente XML se ve así:

<XXX>
    <Name>Sample</Name>
    <MMM>
        <AAA ID="A"/>
        <MMM>
            <BBB ID="B"/>
            <MMM>
                <AA ID="C"/>
                <BB ID="D"/>
            </MMM>
        </MMM>
    </MMM>
</XXX>

Pero necesita ser transformado en:

<XXX>
    <Name>Sample</Name>
    <MMM>
        <MMM>
            <MMM>
                <AAA ID="A"/>
                <BBB ID="B"/>
            </MMM>
            <AA ID="C"/>            
        </MMM>
        <BB ID="D"/>
    </MMM>
</XXX>

La regla es simple, el elemento MMM solo puede tener dos nodos de elemento hijo. Si solo uno de esos nodos es otro MMM, debe ocupar la primera posición.

Es fácil usar código, pero estos fragmentos XML son valores de columnas XML en una base de datos SQL, y quiero usar SQL junto con XSLT para actualizar esos valores.

¿Algún puntero o sugerencia?

Respuestas a la pregunta(1)

Su respuesta a la pregunta