Вы можете использовать xsl:attribute
здесь для создания атрибута
<xsl:template match="p">
<p>
<xsl:attribute name="id">
<xsl:number />
</xsl:attribute>
<xsl:apply-templates />
</p>
</xsl:template>
В качестве альтернативы, если вы добавите strip-space
к вашей таблице стилей, вы можете использовать position()
<xsl:strip-space elements="*" />
<xsl:template match="body">
<test>
<xsl:apply-templates />
</test>
</xsl:template>
<xsl:template match="p">
<p id="{position()}">
<xsl:apply-templates />
</p>
</xsl:template>
Без strip-space
xsl:apply-templates
выделит текстовые узлы с пробелами, которые будут влиять на положение.Учтите, что если бы у вас были body
другие элементы, кроме p
, это не дало бы ожидаемых результатов.В этом случае вы можете сделать <xsl:apply-templates select="p" />
, но это предполагает, что вы хотите игнорировать другие элементы.