我有我的xml文件
<root>
<item>Apple</item>
<name><![CDATA[Indhu && Mathi]]></name>
<date>28-02-2018</date>
<dollar>500</dollar>
</root>
将我的XSL文件设为:
<xsl:import href="lookupValues.xsl"/>
<xsl:template match="/">
<html>
<head></head>
<body>
<h1>Hello World</h1>
<table border="1">
<tr><td><xsl:value-of select="root/item"/></td> </tr>
<tr><td><xsl:value-of select="root/name"/></td> </tr>
<tr><td><xsl:value-of select="root/date"/></td></tr>
<tr>
<td> Date Format </td>
<td><xsl:call-template name="format_date">
<xsl:with-param name="arg" select="root/date" />
</xsl:call-template> </td>
</tr>
</table>
</body>
</html>
</xsl:template>
此外,调用函数也被写为 lookupValues.xsl:
<xsl:template name="format_date">
<xsl:param name="arg"/>
<xsl:variable name="vDay" select="substring-before($arg, '/')"/>
<xsl:variable name="vMonth" select="substring-before(substring-after($arg, '/'), '/')"/>
<xsl:variable name="vYear" select="substring-before(substring-after(substring-after($arg, '/'), '/'), ' ')"/>
<xsl:if test="string-length($vDay) < 3">
<xsl:text>0</xsl:text>
</xsl:if>
<xsl:value-of select="$vDay"/>
<xsl:text>-</xsl:text>
<xsl:if test="string-length($vMonth) < 4">
<xsl:text>0</xsl:text>
</xsl:if>
<xsl:value-of select="$vMonth"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="$vYear"/>
</xsl:template>
我想以DD / MMM / YYYY格式打印我的日期。需要在我的代码中进行一些更正。我不确定这个功能。
答案 0 :(得分:1)
XSLT 1.0不提供日期格式化的任何内置函数。有date time extensions稍微简化了使用日期的任务,但并非所有扩展都按照我们的要求工作。
您必须编写自定义模板来处理数字月份名称的转换,即02
到Feb
。以下是将日期从DD-MM-YYYY
格式转换为DD/MMM/YYYY
格式的样式表。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" />
<xsl:strip-space elements="*" />
<xsl:template match="root">
<formattedDate>
<xsl:call-template name="format-date">
<xsl:with-param name="date" select="date" />
</xsl:call-template>
</formattedDate>
</xsl:template>
<xsl:template name="format-date">
<xsl:param name="date" />
<xsl:variable name="day" select="substring($date, 1, 2)" />
<xsl:variable name="month" select="substring($date, 4, 2)" />
<xsl:variable name="year" select="substring($date, 7, 4)" />
<xsl:variable name="monthName">
<xsl:call-template name="month-name">
<xsl:with-param name="month" select="$month" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="concat($day, '/', $monthName, '/', $year)" />
</xsl:template>
<xsl:template name="month-name">
<xsl:param name="month" />
<xsl:choose>
<xsl:when test="$month = 1">Jan</xsl:when>
<xsl:when test="$month = 2">Feb</xsl:when>
<xsl:when test="$month = 3">Mar</xsl:when>
<xsl:when test="$month = 4">Apr</xsl:when>
<xsl:when test="$month = 5">May</xsl:when>
<xsl:when test="$month = 6">Jun</xsl:when>
<xsl:when test="$month = 7">Jul</xsl:when>
<xsl:when test="$month = 8">Aug</xsl:when>
<xsl:when test="$month = 9">Sep</xsl:when>
<xsl:when test="$month = 10">Oct</xsl:when>
<xsl:when test="$month = 11">Nov</xsl:when>
<xsl:when test="$month = 12">Dec</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
如果日期的输入格式是永久性的,并且看起来像28-02-2018(dd-mm-yyyy),则可以简化从参数中捕获日期:
<xsl:template name="format_date">
<xsl:param name="arg"/>
<xsl:variable name="day">
<xsl:value-of select="substring($arg,1,2)"/>
</xsl:variable>
<xsl:variable name="month">
<xsl:value-of select="substring($arg,4,2)"/>
</xsl:variable>
<xsl:variable name="year">
<xsl:value-of select="substring($arg,7,4)"/>
</xsl:variable>
<xsl:variable name="monthName">
<xsl:call-template name="month-name">
<xsl:with-param name="month" select="$month" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="concat($day, '/', $monthName, '/', $year)" />
</xsl:template>