我的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,然后获得第一个项目,但我认为这将是不必要的复杂,并且必须有一个更简单的方法来做我想要的做。
答案 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>