我正在尝试找出执行嵌套的for-each和排序的最佳方法。例如,我的XSLT如下所示:
选择节点集。
按Date属性排序。
执行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() < 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解析器。提前致谢!
@Date
属性的值(虽然未显示)是那种简单字符串排序可与之正确工作的格式(例如yyyy/mm/dd)。 - Dimitre Novatchevdd/MMM/yyyy
和其他不太容易处理的变体... - Oded