2014-01-10 10 views
1

У меня проблема, что я не совсем уверен, как решить проблему. Мне нужно преобразовать формат даты узла DateOfBirth в следующий XML от DD-MMM-YYYY до YYYY-MM-DD. Я знаю о функции даты даты в XSL, но я не уверен, как это работает, когда дело доходит до перевода месяцев, которые отформатированы как текстовый формат MMM, а не в числовом формате ММ.Преобразование формата даты в XSL

Любые советы очень ценятся.

<PersonalInformation> 
    <Talisma_StudentID>987654</Talisma_StudentID> 
    <SITS_StudentCode>201561230</SITS_StudentCode> 
    <Title>MR</Title> 
    <ForeName1>Charles</ForeName1> 
    <ForeName2>XML</ForeName2> 
    <ForeName3>TEST</ForeName3> 
    <Surname>Dickens</Surname> 
    <KnownAs>Charlie</KnownAs> 
    <DateOfBirth>01-OCT-1950</DateOfBirth> 
    <Sex>M</Sex> 
</PersonalInformation> 
+0

Смотрите, если это помогает: http://stackoverflow.com/ a/20676579/3016153 Обратите внимание, что ваш случай на самом деле проще, поскольку позиции фиксированы - так что вы можете извлечь параметры по номерам. –

+0

Можете ли вы использовать XSLT 2.0 или вы застряли на 1.0? –

+0

Нет, я боюсь, что XSLT 1.0 - это все, что доступно мне. –

ответ

4

Это должно выполнить эту работу.

Формат: DD-MMM-YYYY становится YYYY-MM-DD
Пример: 27-августа-1987 становится 1987-08-27

Используя этот XSL v1.0:

<xsl:template match="/"> 
    <html lang="en"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
     <title>Date Conversion</title> 
    </head> 
    <body> 
     <xsl:call-template name="date"> 
     <xsl:with-param name="dd-mmm-yyyy" select="$XMLDOC/PersonalInformation/DateOfBirth"/> 
     </xsl:call-template> 
    </body> 
    </html> 
</xsl:template> 

<xsl:template name="date"> 
    <xsl:param name="dd-mmm-yyyy"/> 

    <xsl:variable name="dd" select="substring-before($dd-mmm-yyyy, '-')"/> 
    <xsl:variable name="mmm-yyyy" select="substring-after($dd-mmm-yyyy, '-')"/> 
    <xsl:variable name="mmm" select="substring-before($mmm-yyyy, '-')"/> 
    <xsl:variable name="yyyy" select="substring-after($mmm-yyyy, '-')"/> 

    <xsl:value-of select="$yyyy"/> 
    <xsl:text>-</xsl:text> 

    <xsl:choose> 
    <xsl:when test="$mmm = 'JAN'">01</xsl:when> 
    <xsl:when test="$mmm = 'FEB'">02</xsl:when> 
    <xsl:when test="$mmm = 'MAR'">03</xsl:when> 
    <xsl:when test="$mmm = 'APR'">04</xsl:when> 
    <xsl:when test="$mmm = 'MAY'">05</xsl:when> 
    <xsl:when test="$mmm = 'JUN'">06</xsl:when> 
    <xsl:when test="$mmm = 'JUL'">07</xsl:when> 
    <xsl:when test="$mmm = 'AUG'">08</xsl:when> 
    <xsl:when test="$mmm = 'SEP'">09</xsl:when> 
    <xsl:when test="$mmm = 'OCT'">10</xsl:when> 
    <xsl:when test="$mmm = 'NOV'">11</xsl:when> 
    <xsl:when test="$mmm = 'DEC'">12</xsl:when> 
    </xsl:choose> 

    <xsl:text>-</xsl:text> 
    <xsl:value-of select="$dd"/> 
</xsl:template> 

Применительно к этому XML:

<PersonalInformation> 
    <Talisma_StudentID>987654</Talisma_StudentID> 
    <SITS_StudentCode>201561230</SITS_StudentCode> 
    <Title>MR</Title> 
    <ForeName1>Charles</ForeName1> 
    <ForeName2>XML</ForeName2> 
    <ForeName3>TEST</ForeName3> 
    <Surname>Dickens</Surname> 
    <KnownAs>Charlie</KnownAs> 
    <DateOfBirth>01-OCT-1950</DateOfBirth> 
    <Sex>M</Sex> 
</PersonalInformation> 

Производит этот результат:
1950-10-01

Смежные вопросы