2009-03-26 4 views
4

j'ai une structure comme celle-ci:XSLT: Obtenir la dernière date de

<Info ID="1"> 
    ... 
    <Date>2009-04-21</Date> 
    </Info> 
    <Info ID="2"> 
    ... 
    <Date>2009-04-22</Date> 
    </Info> 
    <Info ID="3"> 
    ... 
    <Date>2009-04-20</Date> 
    </Info> 

Je veux obtenir la dernière date en utilisant XSLT (dans cet exemple - 2009-04-22).

Répondre

12

figured it out, n'a pas été aussi dur que je pensais que ce sera:

 <xsl:variable name="latest"> 
      <xsl:for-each select="Info"> 
      <xsl:sort select="Date" order="descending" /> 
      <xsl:if test="position() = 1"> 
       <xsl:value-of select="Date"/> 
      </xsl:if> 
      </xsl:for-each> 
     </xsl:variable> 
     <xsl:value-of select="$latest"/> 
+1

Face à un format de date différente (dans mon cas dd-mm-aaaa) qui suit genre a fonctionné pour moi: '' –

2

XSLT 2.0+: <xsl:perform-sort> est utilisé lorsque l'on veut trier les éléments sans traitement des éléments individuellement. <xsl:sort> est utilisé pour traiter les éléments dans l'ordre trié. Puisque vous voulez juste la dernière date dans ce cas, vous n'avez pas besoin de traiter chaque élément <Info>. Utilisez <xsl:perform-sort>:

<xsl:variable name="sorted_dates"> 
    <xsl:perform-sort select="Info/Date"> 
    <xsl:sort select="."/> 
    </xsl:perform-sort> 
</xsl:variable> 

<xsl:value-of select="$sorted_dates/Date[last()]"/> 
+2

Vous devriez noter qu'il s'agit de XSLT 2.0 et plus. – Tomalak

1

Dans XSLT 2.0 ou version ultérieure, vous ne devriez pas besoin de trier tout; vous pouvez utiliser max() ...

<xsl:value-of select="max(//Date/xs:date(.))"/> 
Questions connexes