2017-12-21 2 views
0

Ich habe eine Anforderung, bei der das Datumsformat von yyyy-mm-dd zu dd-mmm-yyyy mit XSL geändert werden muss.Ändern Sie einen Attributwert mit XSL

Ich habe es geschafft, den Wert des Datums zu erhalten und die Logik geschrieben, um es zu ändern. Aber irgendwie wird der Wert nicht verändert. Change the Date format

XML-Eingabe

<params> 
<param name ="query" > 
    <queryData> 
     <parameter index ="0" value ="2017-12-06" dataType="java.lang.String"/> 
     <parameter index ="1" value ="2017-12-03" dataType="java.lang.String"/>  
    </queryData> 
</param> 
</params> 

XSLT 1,0

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" /> 
    <xsl:strip-space elements="*" /> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="params/param/queryData/parameter[@value='*'][normalize-space()]"> 
     <xsl:copy> 
      <xsl:call-template name="reformat-date"> 
       <xsl:with-param name="date" select="." /> 
      </xsl:call-template> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template name="reformat-date"> 
     <xsl:param name="date" /> 
     <xsl:variable name="dd" select="substring-after(substring-after($date, '-'), '-')" /> 
     <xsl:variable name="mmm" select="substring-before(substring-after($date, '-'),  '-')" /> 
     <xsl:variable name="yyyy" select="substring-before($date, '-')" /> 
     <xsl:value-of select="$dd" /> 
     <xsl:text>-</xsl:text> 
     <xsl:choose> 
      <xsl:when test="$mmm = '01'">JAN</xsl:when> 
      <xsl:when test="$mmm = '02'">FEB</xsl:when> 
      <xsl:when test="$mmm = '03'">MAR</xsl:when> 
      <xsl:when test="$mmm = '04'">APR</xsl:when> 
      <xsl:when test="$mmm = '05'">MAY</xsl:when> 
      <xsl:when test="$mmm = '06'">JUN</xsl:when> 
      <xsl:when test="$mmm = '07'">JUL</xsl:when> 
      <xsl:when test="$mmm = '08'">AUG</xsl:when> 
      <xsl:when test="$mmm = '09'">SEP</xsl:when> 
      <xsl:when test="$mmm = '10'">OCT</xsl:when> 
      <xsl:when test="$mmm = '11'">NOV</xsl:when> 
      <xsl:when test="$mmm = '12'">DEC</xsl:when> 
     </xsl:choose> 
     <xsl:text>-</xsl:text> 
     <xsl:value-of select="$yyyy" /> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Bitte senden Sie Ihren Code (XML und XSLT), die Ihr Problem darstellt und nicht einen Link zu einer externen Seite? ˅. – AntonH

Antwort

2

Wenn Sie das Attribut ändern möchten, dann:

die Anfrage und XSL kann auch hier bestellt werden müssen das Match-Muster anpassen, um das Attribut zu erfüllen und natürlich dann nee d ein Attribut zu erstellen, so dass Sie benötigen

<xsl:template match="params/param/queryData/parameter/@value"> 
    <xsl:attribute name="{name()}"> 
     <xsl:call-template name="reformat-date"> 
      <xsl:with-param name="date" select="." /> 
     </xsl:call-template> 
    </xsl:attribute> 
</xsl:template> 

statt

<xsl:template match="params/param/queryData/parameter[@value='*'][normalize-space()]"> 
    <xsl:copy> 
     <xsl:call-template name="reformat-date"> 
      <xsl:with-param name="date" select="." /> 
     </xsl:call-template> 
    </xsl:copy> 
</xsl:template> 

http://xsltransform.net/bEJaofn/1

Verwandte Themen