Вы получаете 1 каждый раз, потому что con-id
не имеет предшествующих братьев и сестер. (Элементы являются братьями и сестрами, если они имеют один и тот же родительский элемент). Вы должны сосчитать предшествующих братьев и сестер родителя (но только если у предыдущих братьев и сестер con-id
похоже)
<xsl:variable name="aaa" select="count(parent::*/preceding-sibling::*[con-id])+1"/>
В качестве альтернативы, вы можете использовать preceding
ось
<xsl:variable name="aaa" select="count(preceding::con-id)+1"/>
Вы также можете использовать xsl:number
здесь
<xsl:variable name="aaa">
<xsl:number count="con[con-id]" />
</xsl:variable>
Если вы хотите использовать position()
, вам нужно будет добавить другой шаблон для соответствия con-group
, а затем выбрать только элементы con-id
(хотя это действительно будет работать, если у вас не было другой обработки, которую вы хотели бы выполнить это может столкнуться).
<xsl:template match="con-group">
<xsl:apply-templates select="*/con-id" />
</xsl:template>
<xsl:template match="con-id">
<xsl:text> </xsl:text>
<link ref="{.}">
<xsl:variable name="aaa" select="position()" />
<context type="Aut" id="{$aaa}">
<image ref="../../../../command/Templates/Template Art/Auth_.jpg"/>
</context><s/>
</link>
</xsl:template>