我有一个问题,我不确定如何解决。我需要将以下XML中的DateOfBirth节点的日期格式从DD-MMM-YYYY转换为YYYY-MM-DD。我知道XSL中的format-date函数,但是我不确定它在翻译格式为文本MMM格式而不是数字MM格式的月份时是如何工作的。
任何建议都非常感谢。
<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 :(得分:4)
这应该可以胜任。
格式: DD-MMM-YYYY成为YYYY-MM-DD
示例: 1987年8月27日成为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月1日