Вот один из способов сделать это:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="parent">
<xsl:apply-templates select="*[1]"/>
</xsl:template>
<xsl:template match="parent/*">
<xsl:element name="{@id}">
<xsl:apply-templates select="following-sibling::*[1]"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Очевидно, что вам нужно добавить определенную обработку других элементов, но, надеюсь, это должно указать вам правильную структуру.
Он работает так, что родительский элемент обрабатывает только своего первого потомка, затем каждый дочерний элемент родительского элемента создает элемент с именем, соответствующим атрибуту id
, а затем обрабатывает следующий элемент как новый дочерний, рекурсивно.
Одна ошибка с этим - если атрибут id
когда-либо содержит значение, которое не является допустимым именем элемента, преобразование завершится неудачей.