XSLT de transformation de la chaîne de format datetime
Je suis en train de convertir une date/heure qui est dans un format de chaîne de format datetime. Actuellement j'ai ceci mais ça ne fonctionne pas:
<xsl:function name="hcim:ParseDateTime" as="xs:dateTime">
<xsl:param name="DateTimeAsString" as="xs:string"/>
<xsl:variable name="date" select="xs:date(substring($DateTimeAsString, 0, 10))"/>
<xsl:variable name="time" select="xs:time(substring($DateTimeAsString, 11, 8))"/>
<xsl:value-of select="dateTime($date, $time)" />
</xsl:function>
L'erreur que j'obtiens est:
XSLT2 Transformation failed: Error in XPath 2.0 expression
(Cast failed, invalid lexical value - xs:date 'String' - xs:date)
Error occurred in file '******' in statement
'select="xs:date(substring($DateTimeAsString, 0, 10))"'.
Est-il une meilleure façon de le faire? Mon entrants chaîne est dans le format:
2011-07-15 01:05:14 PM
Vous devez vous connecter pour publier un commentaire.
Pour la
xs:date
partie je pense<xsl:variable name="date" select="xs:date(substring($DateTimeAsString, 1, 10))"/>
devrait fonctionner. Pour lexs:time
partie je pense que vous avez besoin de plus de travail que d'extraire une sous-chaîne, en tant que votre échantillon aPM
de sorte que vous besoin pour convertir un 24 heures d'horloge. Et retourner une valeur d'un certain type en fonction de l'utilisation<xsl:sequence select="..."/>
, pas<xsl:value-of select="..."/>
.J'ai lu http://en.wikipedia.org/wiki/12_hour_clock et essayé de la mettre:
Compte tenu de l'entrée
Saxon 9.5 transforme en
La fonction doit probablement explicitement vérifier la présence de
PM
au lieu de supposer que l'absence d'égalité avecAM
signifie qu'il est unPM
temps.substring($DateTimeAsString, 0, 10)
produit2011-07-1
dans ce cas, car il n'y a pas de caractère à la 0e position.