XSLT: для каждого ограничения действует странно - PullRequest
1 голос
/ 02 ноября 2010

У меня есть для каждого с лимитом 3 элемента для отображения. Проблема в том, что если я ограничу его до 3 ..., он не начинается с первой записи, как предполагалось. Вместо этого он начинается со второго. Мои записи заняли места от 001 до 020. И я отсортировал для каждого в этом рейтинге. Таким образом, первые 4 будут отображаться. Так должно быть что-то не так с моими заявлениями для каждого?

<xsl:for-each select="data/activity-feed/entry[recommended = 'Yes'][position() mod 4]">
   <xsl:sort select="activity-rank" data-type="number" order="ascending" />  
        <a href="{$root}/items">
                <p>  
                     <xsl:value-of select="activity-name"/>
                     <xsl:call-template name="description">
                </p>
        </a>
 </xsl:for-each>

Мой XML:

<data>
    <activity-feed>
        <entry id="65">
                <recommended>Yes</recommended>
                <activity-name handle="forra-dive">Forra Dive</activity-name>
                <activity-rank handle="001">001</activity-rank>
        </entry>
    </activity-feed>
</data>

Есть идеи, как сделать только FIRST 4 дисплей? Спасибо

Ответы [ 2 ]

4 голосов
/ 02 ноября 2010

Мне кажется, проблема в том, что при выборе для каждого position() оценивается в несортированном порядке записи.Таким образом, вы получаете первые 3 в исходном (документном) порядке, а не в ранжированном порядке.Если вы покажете больше своих входных данных, мы можем сказать наверняка.

Если это так, попробуйте:

<xsl:for-each select="data/activity-feed/entry[recommended = 'Yes']">
   <xsl:sort select="activity-rank" data-type="number" order="ascending" />  
   <xsl:if test="position() &lt; 4">
      <a href="{$root}/items">
         <p>  
            <xsl:value-of select="activity-name"/>
            <xsl:call-template name="description">
         </p>
      </a>
   </xsl:if>
 </xsl:for-each>

Исправление состоит в том, что мы проверяем на position() внутри отсортированный цикл for-each, а не "снаружи" сортировки.

0 голосов
/ 02 ноября 2010

Почему вы используете модуль?Если вы используете статическое число, ограничение цикла должно быть успешным.

<xsl:for-each select="data/activity/entry[recommended='Yes'][position() < 4]>
    ...
</xsl:for-each>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...