XSLT template

Discussion in 'XML' started by Mark, Jul 13, 2004.

  1. Mark

    Mark Guest

    Hello,

    I'm having problems with an XSLT template I'm developing.

    I have a date in an odd format which I'm trying to convert into something
    more readable. The original date is in the format YYYY-MM-DD, and I'd like
    to convert it to DD MON YY.

    I pass the date into my template thusly in my XSLT stylesheet (date-updated
    is the data I'm passing in):

    <xsl:call-template name="formatDate">
    <xsl:with-param name="string" select="date-updated" />
    </xsl:call-template>

    .... and the template is thus:

    <xsl:template name="formatDate">
    <xsl:param name="inDate" />
    <!-- Day -->
    <xsl:variable name="day" select="number(substring($inDate, 9, 2))" />
    <!-- Month -->
    <xsl:variable name="month" select="number(substring($inDate, 6, 2))" />
    <xsl:variable name="converted-month">
    <xsl:choose>
    <xsl:when test="$month=format-number('01', '00')">
    <xsl:value-of select="Jan" />
    </xsl:when>
    ....
    <xsl:when test="$month='12'">
    <xsl:value-of select="Dec" />
    </xsl:when>
    </xsl:choose>
    </xsl:variable>
    <!-- Year -->
    <xsl:variable name="year" select="number(substring($inDate, 3, 2))" />
    <!-- Formatted Date -->
    <xsl:value-of select="concat($inDate, ': ', format-number($day, '00'), '
    ', $converted-month, ' ', format-number($year, '00'))" />
    </xsl:template>

    The output I get is:

    : NaN NaN

    NaN = Not a number, of course, but I can't see why such an error should be
    raised.

    Thanks for any assistance,

    Mark
    Mark, Jul 13, 2004
    #1
    1. Advertising

  2. Mark wrote:


    > <xsl:call-template name="formatDate">
    > <xsl:with-param name="string" select="date-updated" />
    > </xsl:call-template>
    >
    > ... and the template is thus:
    >
    > <xsl:template name="formatDate">
    > <xsl:param name="inDate" />


    I think you need
    <xsl:param name="string" />
    here or
    <xsl:with-param name="inDate" select="date-updated" />
    above, the name of the parameter needs to be the same in xsl:with-param
    and xsl:param.


    --

    Martin Honnen
    http://JavaScript.FAQTs.com/
    Martin Honnen, Jul 13, 2004
    #2
    1. Advertising

  3. Mark

    Mark Guest

    > I think you need
    > <xsl:param name="string" />
    > here or
    > <xsl:with-param name="inDate" select="date-updated" />
    > above, the name of the parameter needs to be the same in xsl:with-param
    > and xsl:param.


    Yes, you're right - thanks.

    Mark
    Mark, Jul 13, 2004
    #3
  4. Mark

    Mark Guest

    > Yes, you're right - thanks.

    Another problem - the month comes in as a 2 digit number (e.g. 01 for Jan).

    How can I convert it to the text "Jan"?

    I've tried the following:

    <xsl:variable name="month" select="number(substring($inDate, 6, 2))"/>
    <xsl:variable name="converted-month">
    <xsl:choose>
    <xsl:when test="$month='1'">
    <xsl:value-of select="Jan"/>
    </xsl:when>
    ....
    </xsl:choose>
    </xsl:variable>

    .... but the match is never made: it always produces no output.

    I've tried outputting $month, and that produces the correct month number
    (e.g. "1", rather than "01"), so the correct data is going in. I just can't
    seem to get the comparison right.

    Thanks for any information,

    Mark
    Mark, Jul 13, 2004
    #4
  5. In article <40f3e4b9$0$13162$>, Mark wrote:
    > Another problem - the month comes in as a 2 digit number (e.g. 01 for Jan).
    >
    > How can I convert it to the text "Jan"?
    >
    > I've tried the following:
    >
    > <xsl:variable name="month" select="number(substring($inDate, 6, 2))"/>
    > <xsl:variable name="converted-month">
    > <xsl:choose>
    > <xsl:when test="$month='1'">
    > <xsl:value-of select="Jan"/>
    > </xsl:when>
    > ...
    > </xsl:choose>
    > </xsl:variable>
    >
    > ... but the match is never made: it always produces no output.


    The match is made, but <xsl:value-of select="Jan"/> is the value of the
    element named "Jan". Because there is no element named "Jan", the value
    is empty. If you want the value to be a string use

    <xsl:value-of select="'Jan'"/>

    If you want the value to be a text node use

    <xsl:text>Jan</xsl:text>
    A. Bolmarcich, Jul 13, 2004
    #5
  6. Mark

    Mark Guest

    > The match is made, but <xsl:value-of select="Jan"/> is the value of the
    > element named "Jan". Because there is no element named "Jan", the value
    > is empty. If you want the value to be a string use
    >
    > <xsl:value-of select="'Jan'"/>
    >
    > If you want the value to be a text node use
    >
    > <xsl:text>Jan</xsl:text>


    Great - thank you very much.

    Mark
    Mark, Jul 14, 2004
    #6
  7. Deirdre Saoirse Moen, Jul 19, 2004
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Bernd Fuhrmann
    Replies:
    0
    Views:
    431
    Bernd Fuhrmann
    Feb 12, 2004
  2. Chris Theis
    Replies:
    2
    Views:
    453
    Chris Theis
    Jul 24, 2003
  3. tom_usenet
    Replies:
    0
    Views:
    520
    tom_usenet
    Jul 24, 2003
  4. Replies:
    1
    Views:
    2,082
    Gianni Mariani
    Jun 8, 2007
  5. Peng Yu
    Replies:
    3
    Views:
    754
    Thomas J. Gritzan
    Oct 26, 2008
Loading...

Share This Page