簡體   English   中英

XSLT嵌套排序/ for-each

[英]XSLT nested sort / for-each

我試圖找出執行嵌套for-each和排序的最佳方法。 例如,我的XSLT執行以下操作:

  1. 選擇節點集。

  2. 按日期排序屬性。

  3. 執行position()以拉出4個節點。

現在,下一部分是我想要弄清楚的。 在第3步之后,我需要再次按Date屬性排序,但這次按升序排序...現在數據集縮小到4個節點。 建議? 謝謝您的幫助!!


XSLT:

  <xsl:template name="AdmissionsNewsList">
    <ul class="stories-list">
      <xsl:for-each select="AdmissionsSectionFront/TaxonomyNavigation[@Name='AdmissionsNewsList']/Category/Pages/Page">
        <xsl:sort select="@Date" order="descending" />
              <xsl:if test="position() &lt; 5">

                    <!-- NOW THAT THE NODES HAVE BEEN SELECTED, SORTED, AND POSTION LIMIT SET
                         I NEED TO PERFORM ANOTHER SORT BY DATE (ASCENDING ORDER) HERE ON THE NARROWED DOWN DATA SET -->

                            <li>
                              <xsl:choose>
                                  <xsl:when test="normalize-space(@ThumbnailImage)">
                                      <img alt="{@LocalAlternateText}" src="images/{@ThumbnailImage}" />
                                  </xsl:when>
                                  <xsl:otherwise>
                                      <img alt="{@LocalAlternateText}" src="images/News%20Photos/Default.jpg"/>
                                  </xsl:otherwise>
                              </xsl:choose>
                              <div>
                                <h5>
                                  <xsl:value-of select="@Title"/>
                                </h5>
                                <br/>
                                <xsl:apply-templates select="@Abstract"/>
                                <br/><br/>
                                <a href="{@URL}" class="full-story">
                                  <xsl:apply-templates select="Page[@Name='Link']/@Target"/>Full Story
                                </a>
                              </div>
                            </li>

              </xsl:if> 
      </xsl:for-each>
    </ul>
  </xsl:template>

注意:這必須在XSLT 1.0中並使用MSXML 4.0 Parser。 提前致謝!

而不是

  <xsl:for-each select=
    "AdmissionsSectionFront/TaxonomyNavigation
                    [@Name='AdmissionsNewsList']/Category/Pages/Page">
    <xsl:sort select="@Date" order="descending" />
          <xsl:if test="position() &lt; 5">

用途

  <xsl:variable name="vNewAdmPages" select=
    "AdmissionsSectionFront/TaxonomyNavigation
                    [@Name='AdmissionsNewsList']/Category/Pages/Page">
  "/>
  <xsl:for-each select="$vNewAdmPages">
    <xsl:sort select="@Date" order="ascending" />
          <xsl:if test="position() > count($vNewAdmPages) -5">

通過這種方式,您需要單一排序並直接獲得感興趣的五個節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM