Sie können die Funktion format-dateTime()
nicht für eine Zeichenfolge verwenden, die keine gültige dateTime-Funktion ist (oder die format-date()
-Funktion für eine Zeichenfolge, die kein gültiges Datum ist). Sie müssen die Zeichenfolge zuerst mithilfe von Zeichenfolgenfunktionen verarbeiten.
Versuchen:
<xsl:template name="convertDate">
<xsl:param name="datestring"/>
<xsl:variable name="d" select="substring-before($datestring, '-')"/>
<xsl:variable name="MMM" select="substring-before(substring-after($datestring, '-'), '-')"/>
<xsl:variable name="m" select="string-length(substring-before('JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC', $MMM)) div 3 + 1"/>
<xsl:variable name="y" select="substring-after(substring-after($datestring, '-'), '-')"/>
<xsl:value-of select="$y"/>
<xsl:value-of select="format-number($m, '-00')"/>
<xsl:value-of select="format-number($d, '-00')"/>
</xsl:template>
Aufruf dieser Vorlage mit einem Datumszeichen Parameter von "31-DEC-2016" wird ein Wert von "2016.12.31" zurückzukehren.
Beispiel des Anrufs (meist zu raten, nicht den Eingang gesehen zu haben):
<ns1:QuoteDate>
<xsl:call-template name="convertDate">
<xsl:with-param name="datestring" select="/Quote/QuoteHeader/QuoteDate"/>
</xsl:call-template>
</ns1:QuoteDate>
2,0 In XSLT, eine Funktion statt einer benannten Vorlage definieren. Das folgende Stylesheet:
XSLT 2,0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://www.example.com/my"
exclude-result-prefixes="xs my">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:function name="my:convertDate">
<xsl:param name="string"/>
<xsl:variable name="parts" select="tokenize($string, '-')"/>
<xsl:variable name="m" select="index-of (('JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'), $parts[2])"/>
<xsl:sequence select="xs:date(concat($parts[3], format-number($m, '-00'), format-number(number($parts[1]), '-00')))" />
</xsl:function>
<xsl:template match="/">
<result>
<xsl:value-of select="my:convertDate('9-MAR-2016')"/>
</result>
</xsl:template>
</xsl:stylesheet>
zurückkehren wird:
<?xml version="1.0" encoding="utf-8"?>
<result>2016-03-09</result>
Wie diese Vorlage in meinem Xslt benutzen? Ich möchte diese Vorlage für eine bestimmte Variable anwenden –
@srinivaskalyan Bitte bearbeiten Sie Ihre Frage und bieten ein Beispiel - siehe [MCVE]. –
Danke. Wird es für einen Monat funktionieren? –