У меня есть 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>
Теперь я хочу получить самый последний элемент по дате, для которого флаг breaknews установлен в true.
Кажется,Я могу фильтровать флаг, когда делаю для каждого
<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 после предложения sort, чтобы затем получить первый элемент, но я подумал, что это будет излишне сложно, идолжен был быть более простой способ сделать то, что я пытаюсь сделать.