2011-11-24 93 views
2

後獲得第一個項目我有XML看起來像這樣的試圖XSLT排序在Sitecore的

<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,然後獲得第一個條目,但我認爲這將會是不必要的複雜,並且必須有更簡單的方法來做我正在嘗試的去做。

回答

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> 
+0

是的是做到了。謝謝! – Garnaph