Предполагая, что имя параметра в вашем шаблоне было element , вы могли бы добиться этого, проверив, есть ли какие-либо последующие элементы этого элемента
<xsl:value-of select="not($element/following-sibling::*)" />
Итак, учитывая следующееXSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/TEI">
<xsl:call-template name="text">
<xsl:with-param name="element" select="text[@id='E']"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="text">
<xsl:param name="element" />
<xsl:choose>
<xsl:when test="not($element/following-sibling::*)">Last</xsl:when>
<xsl:otherwise>Not Last</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Применительно к следующему XML
<TEI>
<text id="R" />
<text id="E" />
<text id="D" />
</TEI>
Выводится следующее
Not Last
Изменить параметр на E элемент, следующий он выводит вместо
Last
Однако, если возможно, может быть лучше избежать использования call-template с параметром.Лучшим шаблоном дизайна будет использование apply-templates здесь
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/TEI">
<xsl:apply-templates select="text[@id='D']" />
</xsl:template>
<xsl:template match="text[following-sibling::*]">
<xsl:text>Not Last</xsl:text>
</xsl:template>
<xsl:template match="text">
<xsl:text>Last</xsl:text>
</xsl:template>
</xsl:stylesheet>
Это также должно дать те же результаты