В качестве первого шага рассмотрим следующие действия:
<xsl:template match="p/pPr[pStyle[@val = 'EQsolutionlist1']]">
<abc>
<q>
<xsl:value-of select="position()"/>
</q>
</abc>
</xsl:template>
Однако это не совсем правильно, поскольку position()
здесь дает вам положение узла в наборе узлов, выбранных xsl: apply-templates, а не положение узла в наборе узлов, совпадающих с этим конкретным правилом шаблона.
Так что вам нужно изменить xsl: apply-templates, который запускает это правило шаблона, так что он выбирает только узлы, которые вы хотите пронумеровать: переместите предикат [pStyle[@val = 'EQsolutionlist1']]
в инструкцию xsl:apply-templates
.
Помните, что position()
дает вам положение элемента контекста в последовательности элементов, которые вы в данный момент обрабатываете.
Если вы используете position()
в правой части «/», как в A/position()
, «/» означает, что выражение справа будет оцениваться один раз для каждого элемента, выбранного выражением в оставил; «последовательность элементов, которые вы сейчас обрабатываете» - это набор узлов, выбранных A, и их позиции равны 1, 2, 3, ... N, где N - количество узлов, выбранных выражением A. Что не вы хотите вообще.
Если вы используете position()
в самом внешнем коде правила шаблона, «последовательность элементов, которые вы сейчас обрабатываете» - это последовательность, выбранная инструкцией xsl:apply-templates
, которая инициировала выполнение это шаблонное правило.