Question

J'ai un attribut XML, <EventDate>2011-06-16 08:00:00</EventDate> et je souhaite extraire 08:00:00 en utilisant XSLT.

J'ai vu qu'il y avait fn:hours-from-dateTime(datetime) grâce à w3schools .Alors je me demande, pourquoi n'y a-t-il pas de fn:time-from-dateTime(datetime)?

Et comment l'utiliser?Mon code actuel est:

<td><xsl:value-of select="@EventDate"/></td>

Qui affiche la dateHeure correctement.Cependant:

 <td><xsl:value-of select="hours-from-dateTime(@EventDate)"/></td>

Cela ne fonctionne pas.

Enfin, y a-t-il quelque chose de plus élégant que de faire:

<td><xsl:value-of select="hours-from-dateTime(@EventDate)"/>:
<xsl:value-of select="minutes-from-dateTime(@EventDate)"/>:
<xsl:value-of select="seconds-from-dateTime(@EventDate)"/></td>

?

Était-ce utile?

La solution 2

Merci pour les deux suggestions, mais comme je n'en avais pas vraiment besoin en tant que variable dateTime, je l'ai simplement traitée comme une chaîne et utilisé:

<xsl:value-of select="substring-after(@EventDate, ' ')"/>

Autres conseils

Utilisez simplement une fonction de conversion ou de construction:

<xsl:value-of select="xs:time(@dateTime)"/>

Cela suppose que l'attribut @dateTime est de type xs: dateTime suite au traitement du schéma.Si vous n'utilisez pas de processeur compatible avec les schémas, vous devrez d'abord le convertir en xs: dateTime:

<xsl:value-of select="xs:time(xs:dateTime((@dateTime))"/>

et bien sûr, cet espace entre la date et l'heure doit être un "T" pour que cela fonctionne.

La date avec laquelle vous commencez n'a pas le séparateur d'heure «T», vous devrez donc l'insérer si vous voulez utiliser les fonctions dateTime.

Je suggère ce qui suit:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs fn" version="2.0"
   xmlns:fn="http://www.w3.org/2005/xpath-functions">
   <xsl:template match="/">
    <foo>
        <xsl:variable name="time" select="translate(string(/input), ' ', 'T')"/>
        <xsl:value-of select="fn:format-dateTime(xs:dateTime($time), '[h]:[m01]:[s01]')"/>        
    </foo>
</xsl:template>

Ceci suppose une entrée comme suit:

<input>2011-06-16 09:00:00</input>

Pour plus d'informations, consultez le format-dateTime dans la spécification xslt20.Il existe de nombreuses options pour mettre en forme la valeur de la date et de l'heure en utilisant l'argument "chaîne d'image".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top