尝试在Sitecore中进行XSLT排序后获取第一个项目

时间:2011-11-24 10:55:40

标签: xslt sitecore

我的XML看起来像这样

<xml>
<news>
    <newsitem>
        <publishdate>2011-10-11</publishdate>
        <title>Article 1</title>
        <breakingnewsflag>false</breakingnewsflag>
    </newsitem>
    <newsitem>
        <publishdate>2009-10-14</publishdate>
        <title>Article 2</title>
        <breakingnewsflag>true</breakingnewsflag>
    </newsitem>
    <newsitem>
        <publishdate>2009-10-12</publishdate>
        <title>Article 3</title>
        <breakingnewsflag>true</breakingnewsflag>
    </newsitem>
</news>
</xml>

现在我要做的是按日期获取最新的项目,将breakingnewsflag设置为true。

似乎我可以在执行for-each

时过滤标记
<xsl:for-each select="sc:item('/sitecore/content/Home',.)/item[sc:fld('BreakingNewsStory',.)]">

我可以在这个集合中进行排序

<xsl:sort select="sc:fld('PublishDate',.)" order="ascending" />

让我看起来像这样的XSLT ......

<xsl:for-each select="sc:item('/sitecore/content/Home',.)/item[sc:fld('BreakingNewsStory',.)]">
<xsl:sort select="sc:fld('PublishDate',.)" order="ascending" />

Article Name: <xsl:value-of select="@name" /><br />
Title: <sc:text field="title"/> <br />

</xsl:for-each>

...但我无法获得第一项。

我可以在使用这种语法检查标志后获得第一项

<xsl:for-each select="sc:item('/sitecore/content/Home',.)/item[sc:fld('BreakingNewsStory',.)][1]">

...但是在订购之前会抓住它。

我正打算尝试在排序条款之后添加另一个foreach,然后获得第一个项目,但我认为这将是不必要的复杂,并且必须有一个更简单的方法来做我想要的做。

1 个答案:

答案 0 :(得分:4)

如果我理解正确,您可以尝试使用position()获取第一项:

<xsl:for-each select="sc:item('/sitecore/content/Home',.)/item[sc:fld('BreakingNewsStory',.)]">
<xsl:sort select="sc:fld('PublishDate',.)" order="ascending" />
  <xsl:if test="position() = 1">
    Article Name: <xsl:value-of select="@name" /><br />
    Title: <sc:text field="title"/> <br />
  </xsl:if>
</xsl:for-each>