2016-11-29 5 views
0

Ich möchte die 31-DEC-2016 dh, TT-MMM-JJJJ in JJJJ-MM-TT in der XSLT mit Format-dateTime-Funktion konvertieren, aber die Ausgabe ist nicht wie erwartet. Kann jemand dabei helfen?Convert 31-DEC-2016 in 2016-12-31

<ns1:QuoteDate> 
      <xsl:value-of select='concat(xp20:format-dateTime(/Quote/QuoteHeader/QuoteDate,"[Y0001]-[M01]-[D01]"),"T00:00:00")'/> 
     </ns1:QuoteDate> 

Ich mag den Wert für diese speziellen thing.31-DEC-2016 erhalten: Dies ist der Eingang ist, und ich habe hier zu verwandeln über im Code

Sobald die umgewandelt wird, wie verketten der Wert T00: 00: 00 bis zum Datum ??

Antwort

1

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> 
+0

Wie diese Vorlage in meinem Xslt benutzen? Ich möchte diese Vorlage für eine bestimmte Variable anwenden –

+0

@srinivaskalyan Bitte bearbeiten Sie Ihre Frage und bieten ein Beispiel - siehe [MCVE]. –

+0

Danke. Wird es für einen Monat funktionieren? –