2013-09-17 2 views
5

Я пытаюсь проверить, возможно ли иметь установку каждого цикла в XSL-файле, который проходит через несколько узлов, но я хочу сделать это так что возвращаются только верхние 3 результата, напримерОграничение количества отсортированных результатов из цикла for-each XSL

<course> 
<unit> 
    <result>80</result> 
</unit> 
<unit> 
     <result>77</result> 
</unit> 
<unit> 
     <result>96</result> 
</unit> 
<unit> 
    <result>69</result> 
</unit> 
</course> 

, а затем использовать для-каждого цикла, подобную следующей:

<xsl:for-each select="/course/unit"> 
<xsl:sort select="result" data-type="number" order="descending"/> 
<xsl:value-of select="result"/> 
</xsl:for-each> 

Но проблема в том, если я что-то вроде: <xsl:for-each select="/course/unit[position() &lt;= 3]"> Это будет захватывать первые 3 узлов, а затем сортировать это не то, что мне нужно, я хочу, чтобы он получил 3 высшие оценки и возвращал эти узлы для отображения информации, а не сортировки результатов после того, как они прошли весь цикл. Я уверен, что есть простой способ достичь этого без использования шаблонов, поэтому любые подсказки будут высоко оценены.

ответ

5

Использование

<xsl:for-each select="/course/unit"> 
<xsl:sort select="result" data-type="number" order="descending"/> 
    <xsl:if test="position() &lt;= 3"> 
    <xsl:value-of select="result"/> 
    </xsl:if> 
</xsl:for-each> 
+1

Это сделало работу отлично, спасибо за подсказку. В конце концов, было просто, ура. – benh11858

Смежные вопросы