Текущий выбранный ответ обычно неверен!
<xsl:if test="not(following-sibling::Unit)">
Это не будет работать с любым XML-документом и любым <xsl:apply-templates>
Первоначальный вопрос касается последнего Unit
, а не последнего брата! Какой из последних сопоставляемых модулей зависит только от выражения в атрибуте select <xsl:apply-templates>
, а не от физических свойств документа XML.
Способ сделать это :
<xsl:apply-templates select="SomeExpression"/>
затем в шаблоне, который соответствует узлам, выбранным SomeExpression
:
<xsl:if test="position() = last()">
. . . .
</xsl:if>
Это проверяет, является ли текущий узел последним в node-list
, выбранном <xsl:apply-templates>
, а не то, что текущий узел является последним братом . Это точно отвечает на оригинальный вопрос.
Если вопрос был сформулирован по-другому, спрашивая, как распознать, является ли последний узел Unit
текущим узлом, тогда наилучшим решением было бы указать отдельный шаблон для этого последнего узла:
<xsl:template match="Unit[last()]">
. . . .
</xsl:template>
Обратите внимание , что в этом случае нет необходимости писать какую-либо условную логику внутри шаблона, чтобы проверить, является ли текущий узел "последним".