Вам необходимо добавить этот код - в шаблоне, который соответствует родительскому элементу Row
<xsl:apply-templates select="Row[@Style='MostCommented']" mode="itemstyle">
<xsl:sort select="@NumComments" data-type="number" order="descending"/>
</xsl:apply-templates>
Кроме того, внутри вашего шаблона (тот, который будет выбран для выполнения в результате выполнения xsl:apply-templates
выше) оборачивает весь существующий код в условное выражение, как показано ниже :
<xsl:template name="MostCommented" match="Row[@Style='MostCommented']" mode="itemstyle">
<xsl:if test="not(position() > 5)">
<!-- Put all already-existing code here -->
</xsl:if>
</xsl:template>
Вот полный пример, иллюстрирующий эту технику :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<t>
<xsl:apply-templates select="*">
<xsl:sort select="@valued"
data-type="number" order="descending"/>
</xsl:apply-templates>
</t>
</xsl:template>
<xsl:template match="post">
<xsl:if test="not(position() >5)">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к следующему документу XML (так как вы забыли его указать !!!):
<t>
<post valued="5"/>
<post valued="2"/>
<post valued="9"/>
<post valued="8"/>
<post valued="6"/>
<post valued="3"/>
<post valued="4"/>
<post valued="10"/>
<post valued="2"/>
<post valued="7"/>
</t>
желаемый, правильный результат выдается :
<t>
<post valued="10"/>
<post valued="9"/>
<post valued="8"/>
<post valued="7"/>
<post valued="6"/>
</t>