Пройдите AST рекурсивно, начиная с корня.
При спуске к узлу типа X выведите открывающий тег:
<X>
затем спуститесь в детей слева направо и напечатайте их содержимое.
После обработки всех детей напечатайте закрывающий тег:
</X>
В листовом узле типа L выведите
<L value="abc"/>
с возможными интересующими значениями атрибутов.
Готово.
Если вы отслеживаете вложенность рекурсии, вы можете распечатать начало и конец тега.
с ведущими пробелами recursion_depth и последующим переводом строки
Тогда ваш XML будет красиво вложен.