Вы имеете в виду, что хотите превратить плоскую последовательность в дерево, в котором каждый родитель имеет ровно один ребенок?
В шаблоне для родительского элемента, применяются шаблоны не для всех детей, но только первого ребенка:
<xsl:template match="category[@type='array']">
<xsl:apply-templates select="*[1]"/>
</xsl:template>
Затем в шаблоне для каждого из детей, справиться с этим ребенком, выписав новый Категория элемент и его имя, а затем применить шаблоны к сразу после собрата:
<xsl:template match="category-name">
<Category>
<Name>
<xsl:apply-templates/>
</Name>
<xsl:apply-templates select="following-sibling::*[1]"/>
</Category>
</xsl:template>
в вашем примере, начальный элемент массива, кажется, упали; нам понадобится специальный код для этого:
<xsl:template match="category-name
[normalize-space = 'Categories']">
<xsl:apply-templates select="following-sibling::*[1]"/>
</xsl:template>
Все вместе:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="category[@type='array']">
<xsl:apply-templates select="*[1]"/>
</xsl:template>
<xsl:template match="category-name[normalize-space = 'Categories']">
<xsl:apply-templates select="following-sibling::*[1]"/>
</xsl:template>
<xsl:template match="category-name">
<Category>
<Name>
<xsl:apply-templates/>
</Name>
<xsl:apply-templates select="following-sibling::*[1]"/>
</Category>
</xsl:template>
</xsl:stylesheet>
От входа вы даете, это производит следующее:
<Category>
<Name>Categories</Name>
<Category>
<Name>BAGS & TRIPODS</Name>
<Category>
<Name>Bags & Cases</Name>
<Category>
<Name>soft cases</Name>
<Category>
<Name>camera</Name>
</Category>
</Category>
</Category>
</Category>
</Category>
Честно говоря, я посмотрел на некоторые примеров с генерацией ключей, но для меня это не имеет смысла. Кажется, что это невозможно без каких-либо родительских идентификаторов id/child id. – jstalnaker
Странно, что пять человек проголосовали за то, чтобы закрыть этот вопрос как не подлежащий ответу, когда был предложен ответ, который ОП объявил полезным. Вопрос немного расплывчатый, но не безответственный. –