Некоторые мысли: apply-templates без select обрабатывает дочерний узел текущего узла контекста; во входном примере элементы n
вообще не имеют дочерних элементов. Кроме того, в вашей переменной вы делаете копию значения, вы создаете новые узлы, которые не имеют отношения к узлам во входной выборке. Поэтому, хотя я не уверен, что вы хотите достичь своей конструкции с применением шаблонов внутри for-each, не имеет смысла, учитывая введенный вами пример ввода и используемую переменную.
Я подозреваю, что вы могли бы использовать XSLT 2.0 для каждой группы, начиная с группы, как в
<xsl:template match="nodes">
<xsl:for-each-group select="n" group-starting-with="n[@c]">
<xsl:sort select="@c"/>
<xsl:value-of select="@c"/>
<xsl:apply-templates select="current-group() except ."/>
</xsl:for-each-group>
</xsl:template>
Если это не поможет, тогда рассмотрите возможность размещения небольшого входного образца с образцами данных и соответствующим выходным образцом, который вы хотите создать с помощью XSLT 2.0, тогда мы можем внести предложения о том, как этого добиться.
[править] Теперь, когда вы опубликовали пример вывода, я публикую улучшенную версию моего предыдущего предложения:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text"/>
<xsl:template match="nodes">
<xsl:for-each-group select="n" group-starting-with="n[@c]">
<xsl:sort select="@c"/>
<xsl:value-of select="@c"/>
<xsl:text> </xsl:text>
<xsl:apply-templates select="current-group() except ."/>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="n[not(@c)]">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
Когда я использую Saxon 9.3 и запускаю таблицу стилей для вашего последнего входного образца, результат будет следующим:
value
Has a relation to node with value
value1
Has a relation to node with value1
value2
Has a relation to node with value2
Has a relation to node with value2
Это то, о чем вы просили, я думаю, поэтому попробуйте этот подход с более сложным реальным вкладом.