Я думаю, что вы можете сделать это без функции расширения.Ваш текущий код, похоже, предполагает, что вы можете иметь более одного Percent
(или, возможно, вообще никакого).Если это так, попробуйте этот шаблон
<xsl:template match="/">
<xsl:for-each select="/x:Invoice/cac:InvoiceLine/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory">
<xsl:sort select="cbc:Percent * (count(cbc:Percent) = 1) + 21 * (1 - (count(cbc:Percent) = 1))" order="descending" />
<xsl:if test="position() = 1">
<xsl:choose>
<xsl:when test="count(cbc:Percent) = 1">
<xsl:value-of select="format-number(cbc:Percent,'00')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="21"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</xsl:template>
Если бы у вас был когда-либо только ноль или один процент, вы могли бы упростить его до этого ...
<xsl:sort select="cbc:Percent * count(cbc:Percent) + 21 * count(cbc:Percent)" order="descending" />
И, конечно, есливсе узлы всегда имели один Percent
, вы могли бы просто сделать это ....
<xsl:sort select="cbc:Percent" />